如何批量更新 - Django数据模型的查询集中的多对多字段?
例如,我有一个名为Photo
的数据模型,另一个名为PhotoStream
。在Photo
中,我有which_stream = models.ManyToManyField(PhotoStream)
。
我提取了一个名为Photos
的{{1}}查询集,我需要在此查询集中的所有对象的多对多字段中添加一个新的childhood_photos
对象。让我们调用这个PhotoStream对象PhotoStream
。
我尝试for_classmates
,但它给了我一个错误:全局名称'which_stream'未定义。
我该怎么做这个操作?
答案 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)
])