我想知道是否存在相当于“添加全部”或“批量创建”的多对多关系,这会减少查询次数(我将为长列表执行此操作)?
关于这个主题的文档似乎表明这是不可能的:
https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/
**Associate the Article with a Publication:**
a1.publications.add(p1)
**Create another Article, and set it to appear in both Publications:**
a2 = Article(headline='NASA uses Python')
a2.save()
a2.publications.add(p1, p2)
a2.publications.add(p3)
答案 0 :(得分:32)
如果要添加查询集以批量添加或删除多对多关系模型的方法:
qs = Article.objects.all()
publications = Publications.objects.get(id=1)
publications.article_set.add(*qs)
publications.save()
publications.article_set.remove(*qs)
publications.save()
答案 1 :(得分:6)
当然有可能!您只需要创建一个明确的intermediate table和
然后使用此模型的bulk_create
方法。
答案 2 :(得分:0)
您可以为此使用RelatedManager.set
:
a2 = Article(headline='NASA uses Python')
a2.save()
a2.publications.set([p1, p2, p3])
The documentation还告诉我们,无需在结尾处调用.save()
。