31

我想知道对于多对多的关系是否有相当于“全部添加”或“批量创建”的方法,这会减少查询的数量(我会为一长串列表这样做)?

关于这个主题的文档似乎表明这是不可能的:

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)
4

4 回答 4

42

如果要将查询集添加到多对多关系模型的批量添加或删除方法:

qs = Article.objects.all()
publications = Publications.objects.get(id=1)

publications.article_set.add(*qs)
publications.save()
publications.article_set.remove(*qs)
publications.save()
于 2014-06-06T09:34:44.003 回答
9

当然有可能!你只需要创建一个显式的中间表,然后使用这个模型的bulk_create方法。

于 2012-06-01T11:39:54.480 回答
0

您可以RelatedManager.set为此使用:

a2 = Article(headline='NASA uses Python')
a2.save()
a2.publications.set([p1, p2, p3])

文档还告诉我们,最后不需要打电话.save()

于 2020-06-09T10:25:07.533 回答
0

添加组并分配其权限的示例

group = Group.objects.create(name='user_manager')
codenames = ['delete_user', 'add_user', 'view_user', 'change_user']
permissions = Permission.objects.filter(codename__in=codenames)
group.permissions.add(*permissions)
于 2021-12-16T07:42:12.310 回答