简体   繁体   中英

Multiply two fields together in django

I have the following query:

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

Is it possible to multiple the royalty_price * conversion_to_usd in the query? Or do I need to do a list comprehension or dive into raw SQL?

The Django documentation warns us that the extra() method will soon be deprecated. Since I came upon this answer when searching for a similar question, I thought I'd share an alternative approach using Django's built-in expressions , specifically the F() object.

In response to the original question, you could achieve the desired outcome with the following:

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

From the documentation:

F() can be used to create dynamic fields on your models by combining different fields with arithmetic:

And here's another example taken from the documentation that further illustrates its usage:

company = Company.objects.annotate(
    chairs_needed=F('num_employees') - F('num_chairs'))

You can use extra() and specify select argument:

sales_for_date_for_provider.extra(select={'result': 'royalty_price * conversion_to_usd'})

The result would contain a QuerySet where each object would have an attribute result containing the multiplication of royalty_price and conversion_to_usd fields.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM