我有以下查询:
sales_for_date_for_provider.exclude(sales_or_return='R').values_list('royalty_price', 'conversion_to_usd'))
是否可以在查询中复用royalty_price
* conversion_to_usd
?或者我是否需要进行列表理解或深入了解原始SQL?
答案 0 :(得分:4)
Django文档warns我们很快就会弃用extra()
方法。由于我在搜索类似问题时得到了这个答案,我想我会使用Django的built-in expressions,特别是F()
对象分享另一种方法。
在回答原始问题时,您可以通过以下方式实现预期结果:
sales_for_date_for_provider.annotate(
result=F('royalty_price') * F('conversion_to_usd'))
F()可以通过将不同的字段与算术组合在一起来在模型上创建动态字段:
这是从文档中获取的另一个例子,它进一步说明了它的用法:
company = Company.objects.annotate(
chairs_needed=F('num_employees') - F('num_chairs'))
答案 1 :(得分:3)
您可以使用extra()
并指定select
参数:
sales_for_date_for_provider.extra(select={'result': 'royalty_price * conversion_to_usd'})
结果将包含QuerySet
,其中每个对象都有一个属性result
,其中包含royalty_price
和conversion_to_usd
字段的乘法。