本文介绍了Django QuerySet按表达式排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何使用order_by,如order_by('field1'*'field2')
例如我的商品的价格以不同的货币列出,所以要订购商品 - 我必须进行货币转换。

How can i use order_by like order_by('field1'*'field2')For example i have items with price listed in different currencies, so to order items - i have to make currency conversion.

class Currency(models.Model):
    code    = models.CharField(max_length=3, primary_key=True) 
    rateToUSD   = models.DecimalField(max_digits=20,decimal_places=10)

class Item(models.Model):
    priceRT     = models.DecimalField(max_digits=15, decimal_places=2, default=0)
    cur     = models.ForeignKey(Currency)

我想有一些东西:

Item.objects.all().order_by(F('priceRT')*F('cur__rateToUSD'))

但不幸的是,它不工作,我也失败了注释。
如何通过2个模型的字段的值乘积来排除QuerySet排序。

But unfortunately it doesnt work, i also faild with annotate.How can i permorm QuerySet ordering by result of value multiplication of 2 model's fields.

推荐答案

使用方法。具体来说,选择参数来指定方程式,以及 order_by 参数进行排序。

Use the extra() method. Specifically the select argument to specify the equation, and the order_by argument to do the ordering.

这篇关于Django QuerySet按表达式排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 17:23