如何批量更新Django查询集的多对多字段

时间:2016-04-24 11:27:27

标签: python django django-models django-views

如何批量更新 - Django数据模型的查询集中的多对多字段?

例如,我有一个名为Photo的数据模型,另一个名为PhotoStream。在Photo中,我有which_stream = models.ManyToManyField(PhotoStream)

我提取了一个名为Photos的{​​{1}}查询集,我需要在此查询集中的所有对象的多对多字段中添加一个新的childhood_photos对象。让我们调用这个PhotoStream对象PhotoStream

我尝试for_classmates,但它给了我一个错误:全局名称'which_stream'未定义

我该怎么做这个操作?

1 个答案:

答案 0 :(得分:5)

您可以通过字段.through属性访问m2n关系的直通模型(请参阅documentation)。这将允许您批量创建必要的直通模型实例:

through_model = Photo.which_stream.through  # gives you access to auto-created through model
# print through_model
# <class 'app_label.models.Photo_which_stream'>  # or sth. similar

through_model.objects.bulk_create([
    through_model(photo_id=pk, photostream_id=for_classmates.pk) 
        for pk in childhood_photos.values_list('pk', flat=True)
])