Почему метод 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
числом.