在django中将两个字段相乘

时间:2014-09-15 21:44:41

标签: python mysql django django-models django-orm

我有以下查询:

sales_for_date_for_provider.exclude(sales_or_return='R').values_list('royalty_price', 'conversion_to_usd'))

是否可以在查询中复用royalty_price * conversion_to_usd?或者我是否需要进行列表理解或深入了解原始SQL?

2 个答案:

答案 0 :(得分:4)

Django文档warns我们很快就会弃用extra()方法。由于我在搜索类似问题时得到了这个答案,我想我会使用Django的built-in expressions,特别是F()对象分享另一种方法。

在回答原始问题时,您可以通过以下方式实现预期结果:

sales_for_date_for_provider.annotate(
    result=F('royalty_price') * F('conversion_to_usd'))

From the documentation:

  

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_priceconversion_to_usd字段的乘法。