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

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

我提取了一个名为 Photoschildhood_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/

10-15 12:08