因此,我尝试通过运行以下命令来更新我的模型:
FooBar.objects.filter(something=True).update(foobar=F('foo__bar'))
但我得到了以下错误:
FieldError: Joined field references are not permitted in this query
如果F
表达式不允许这样做...我如何实现此更新?
票
鉴于this ticket中的信息,我现在明白这是不可能的,并且永远不会在django中实现,**但是有没有办法实现这个更新?**也许周围有一些工作?我不想使用循环,因为有超过1000万个FooBar
对象,所以SQL比Python快得多。
5条答案
按热度按时间imzjd6km1#
为什么不使用raw sql:基于this,它将类似于
lp0sw83n2#
这是Georgi Yanchev对两个模型的答案的实现:
cwdobuhd3#
对于任何想要一种更简单的方法来做到这一点,而不是有大量对象的情况下,下面的片段应该工作得很好:
对于常规用例,这不应该表现出太大的性能差异,特别是作为数据迁移的一部分运行时。如果需要进一步优化,您也可以选择使用
select_related
。xeufq47z4#
还有另一种方法使用
bulk_update()
(Django 2.2中的新功能),并针对大量记录进行了优化:xj3cbfub5#
Django 1.11增加了对子查询的支持。您应该能够做到: