我想根据两个字段获取唯一的结果后对结果进行排序。我遇到的问题是我无法在Django中使用两个order_by。每当您使用此功能时,Django都会清除前一个order_by()
。
每个order_by()调用都会清除以前的所有顺序。
型号示例:
class Product(models.Model): price = models.FloatField() name = models.CharField(max_length=100) group = models.CharField(max_length=100)
我想获得同一组中价格最低的产品。然后,我想按价格对它们进行排序。像这样:
Product.objects.order_by('group','price').distinct('group').order_by('price') Product.objects.order_by('group','price').distinct('group').order_by('-price')
问题是,如果仅按一阶使用,我会得到不同的产品。
-
编辑
表示例:
id | name | group | price 0 | aaa | aaa | 10.0 1 | aaa | aaa | 1.0 2 | aaa | aaa | 2.0 3 | aaa | aaa | 1.0 4 | bbb | bbb | 2.0 5 | bbb | bbb | 2.1 6 | bbb | bbb | 10.0
按价格排序:
1 | aaa | aaa | 1.0 4 | bbb | bbb | 2.0
按价格排序:
4 | bbb | bbb | 2.0 1 | aaa | aaa | 1.0
我的问题是,当我使用order_by排序时,返回的产品是不同的。
在sql语句中将是这样的:
SELECT * FROM product WHERE id IN ( SELECT DISTINCT ON (group) id FROM product ORDER BY group ASC, price ASC ) ORDER BY price DESC
我正在使用PostgreSQL