如何批量更新 Django 数据模型查询集中的多对多字段?
例如,我有一个名为 Photo
的数据模型,另一个名为 PhotoStream
。在 Photo
中,我有 which_stream = models.ManyToManyField(PhotoStream)
。
我提取了一个名为 Photos
的 childhood_photos
查询集,我需要在这个查询集中所有对象的多对多字段中添加一个新的 PhotoStream
对象。我们称这个 PhotoStream 对象为 for_classmates
。
我尝试 childhood_photos.update(which_stream.add(for_classmates))
,但它给了我一个错误: 全局名称 'which_stream' 未定义 。
我怎样才能做这个手术?
最佳答案
您可以通过字段的 .through
属性(请参阅 documentation )访问您的 m2n 关系的直通模型。这将允许您通过模型实例批量创建必要的:
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)
])
关于python - 如何批量更新 Django 查询集的多对多字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36822493/