Почему метод set в поле многие-ко-многим через пользовательскую модель не работает, а метод add работает?

У меня есть эти модели:

class PackRepo(BaseModel):
    title = models.CharField(max_length=256, verbose_name='Title')

class PackVersion(ModelWithUID, BaseModel):
    repositories = models.ManyToManyField(
        to='PackRepo', verbose_name='Chart Repositories', related_name='chart_versions', through='ChartVersionRepo'
    )

class ChartVersionRepo(BaseModel):
    chart_version = models.ForeignKey(PackVersion, on_delete=CASCADE)
    chart_repo = models.ForeignKey(PackRepo, on_delete=CASCADE)

    class Meta:
        unique_together = ['chart_version', 'chart_repo']

BaseModel имеет некоторые автоматически генерируемые или обнуляемые поля.

Когда я хочу установить пару PackRepo для PackVersion в файле миграции, метод set() не работает, а метод add работает. Метод set не вызывает никаких ошибок, но экземпляры ChartVersionRepo не изменяются. Я искал, но не смог найти причину.

Вот мой код:

        ChartRepoModel = apps.get_model("core", "packrepo")
        pack_version_new_item = copy.deepcopy(duplicate_items[0])
        pack_version_new_item.pk = None
        pack_version_new_item.save()
     
        repos = ChartRepoModel.objects.filter(pack_versions__in=duplicate_items_ids).distinct().values_list('id', flat=True)
        new_item.repositories.set(repos)

Пробовали ли вы назначить repos без части .values_list()?

set() должен получить целое QuerySet или Object, а add() может работать как с ними, так и с простым id числом.

Вернуться на верх