考虑到我有1000个用户,这些用户与"公司"的多对多关系中使用.
现在,我希望从公司列表中删除所有"不活跃"的用户(这是大多数).
我可以用remove
的技巧:
for user in User.filter(active=False):
Company.customers.remove(user)
然而,这也会做1000 s的数据库命中,使它真的很慢.有没有办法让我在Django 里做到这一点?不go rawsql?
考虑到我有1000个用户,这些用户与"公司"的多对多关系中使用.
现在,我希望从公司列表中删除所有"不活跃"的用户(这是大多数).
我可以用remove
的技巧:
for user in User.filter(active=False):
Company.customers.remove(user)
然而,这也会做1000 s的数据库命中,使它真的很慢.有没有办法让我在Django 里做到这一点?不go rawsql?
删除bulk个元素:
Company.customers.remove(*User.objects.filter(active=False))
这将产生两个查询:一个是获取User
个对象的主键(或ManyToManyField
引用的字段),然后在bulk中删除所有这些元素.
如果要为all Company
s执行此操作,可以使用用途:
# 🖟 reference to the Company model
Company.customers.through.objects.filter(user__active=False).delete()
如果我们想使用特定的Company
,我们还可以使用以下方法来限制查询的数量:
# 🖟 reference to the Company model
Company.customers.through.objects.filter(
company=some_company, user__active=False
).delete()