我想排序我的结果后,我已经抓住了两个领域的基础上独特的结果。我遇到的问题是我不能在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
型
按价格排序:
按价格排序:
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
4条答案
按热度按时间wz8daaqr1#
好吧,这是我做的:
字符串
我不认为这是最有效的方法,但它是工作...
2q5ifsrm2#
我遇到了同样的问题,找到了另一个解决方案。在第一次使用sorted_by后跟distinct请求数据库之后,您可以:
字符串
这种解决方案更好,因为您不会向数据库发出第二个请求。
wydwbb8l3#
我喜欢 Alexandria 使用sorted的想法。我将排序函数放入models.QuerySet的子类中,然后相应地设置ProductManager。这允许您将sorted方法链接到您的查询集。
**Gotcha:**返回列表而不是查询集,所以排序后不能使用任何查询集方法。
**相关模型字段排序:**通过点运算符传递一个跨越查找范围的键(key ='price.other'),可以按照相关模型字段进行排序
字符串
**查询
型
pbpqsu0x4#
”这就是我是怎么做的!所以我执行子查询。**
**请记住,这是一个示例代码。把它变成你需要它做的事情。它对我有用,也可能对其他人有用。
样本代码:
字符串