【发布时间】:2017-06-01 17:22:03
【问题描述】:
我想在基于两个字段获取唯一结果后对结果进行排序。我遇到的问题是我不能在 Django 中使用两个 order_by。 Django clears the previous order_by() whenever you use this function.
每次 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
【问题讨论】:
-
实际上,我无法完全理解您在这里想要做什么。您能否提供您尝试获取的 sql 查询?
-
您是否试图获得每组的最低价格,并按价格排序?
-
如果你砍掉第二个
order_by子句,第一个order_by子句的顺序不是简单地保留了吗? -
@emre,我添加了 SQL 查询。
-
@SomeSillyName,没错。
标签: django python-3.x django-orm