Django ORM:many_to_many.extend(some_queryset)
Posted
技术标签:
【中文标题】Django ORM:many_to_many.extend(some_queryset)【英文标题】:Django ORM: many_to_many.extend(some_queryset) 【发布时间】:2020-01-27 16:36:08 【问题描述】:我阅读了RelatedManager 的文档。
我找不到扩展多对多关系的方法。
示例(这就是我的“梦想”的样子):
my_user.groups.extend(my_group_queryset)
我知道我可以用这个:
for group in my_group_queryset:
my_user.groups.add(group)
但我更喜欢在 DB 中循环而不是在我的代码中循环 (guidelines)。
有没有办法在一个方法调用中将多个对象添加到多对多关系中?
【问题讨论】:
【参考方案1】:您可以通过解包查询集来批量添加项目,然后在单个.add(…)
[Django-doc] 调用中添加所有这些元素:
my_user.groups.add(<b>*</b>my_group_queryset)
注意前面的星号 (*
)。因此,这将解压缩查询集,并将每个项目作为单独的参数传递给 .add(…)
函数。
【讨论】:
我很好奇:这是执行一个还是 N 个 sql 语句?换句话说:循环是在 django-orm 中还是在 DB 中? @guettli:它将以 bulk 的形式添加项目。这意味着通常它会导致两个查询:一个是检索项目,另一个是添加所有项目。如果项目的数量巨大,可能需要几个添加查询(每个添加大量关系)。以上是关于Django ORM:many_to_many.extend(some_queryset)的主要内容,如果未能解决你的问题,请参考以下文章
Django models ORM基础操作--白话聊Django系列
python 之 Django框架(orm单表查询orm多表查询聚合查询分组查询F查询 Q查询事务Django ORM执行原生SQL)