Django小技巧13: 使用F()表达式
Posted October 29, 2018
翻译整理自: simpleisbetterthancomplex.com
在 Django QuerySets API 中, F() 用于直接在数据库中引用模型的值。假设你有一个带有price
的 Product 模型, 你希望为所有的Product的价格上涨20%.
一个可以实现在解决方案:
相反, 你可以在单个查询中更新price.
你也可以对单个对象执行这个操作:
要注意, 保存模型后, F()
对象依然存在.
所以, 在更新这样的字段后, product.price
实际上保存的是django.db.models.expressions.CombinedExpression
实例, 而不是实际结果。
如果要立即访问结果:
你可以使用F()
实现annotate功能:
由于price是DecimalField, 而stock是IntegerField,我们需要将表达式包装在ExpressionWrapper
中.
也可以用来过滤数据: