django中的组合order_by和distinct

django中的组合order_by和distinct,django,postgresql,sql-order-by,distinct,Django,Postgresql,Sql Order By,Distinct,大家好 我读了很多关于它的书,我可以理解这样一个实现是缺失的,但是我不明白为什么我不能用Django来模拟一个SELECT(SELECT DISTINCT[…])ORDER BY的行为 我知道PostgreSQL不支持在ORDERBY子句中没有列的DISTINCT ON。但是我可以通过在DISTINCT的子选择上执行ORDER by来达到我想要的结果。我想在Django做同样的事情,因为在这种情况下性能没有问题。但是Django QuerySets(太)懒惰了 我希望能够运行此功能: b = B

大家好

我读了很多关于它的书,我可以理解这样一个实现是缺失的,但是我不明白为什么我不能用Django来模拟一个SELECT(SELECT DISTINCT[…])ORDER BY的行为

我知道PostgreSQL不支持在ORDERBY子句中没有列的DISTINCT ON。但是我可以通过在DISTINCT的子选择上执行ORDER by来达到我想要的结果。我想在Django做同样的事情,因为在这种情况下性能没有问题。但是Django QuerySets(太)懒惰了

我希望能够运行此功能:

b = Backup.objects.filter(state__iexact='up').distinct('md5_checksum').order_by('-create_date', '-title')
或者至少是这样:

b = Backup.objects.filter(state__iexact='up').distinct('md5_checksum')
if b.count() > 6:
    b = b.order_by('-create_date', '-title')
但不幸的是,即使尝试通过count()调用强制执行第一个查询,它也会尝试在同一个查询中执行distinct和order_by,这是失败的

因此,基于此,我必须返回python排序来执行相同的操作:

b = sorted(b, key=lambda x: (x.create_date, x.title), reverse=True)

如果有人有一个更优雅的解决方案,一种迫使Django提交第一个SELECT DISTINCT的方法,我会很乐意拥有它。谢谢

order\u by
方法中,您可以尝试添加
'md5\u checksum'
作为第一个参数。这可能有助于它正确排序,除非我误解了这个问题。

order\u by
方法中,您可以尝试添加
'md5\u checksum'
作为第一个参数。这可能有助于它正确排序,除非我误解了这个问题。

如果您将'md5_checksum'作为order_by方法的第一个参数,它将首先由它排序,这不是我要找的。我想要按创建日期和标题排序的文件,但我只想要一个不同的md5_校验和条目。听起来你可能想使用QuerySet的
raw
方法来运行你自己的SQL,在这里对你有效。是的,这是我想的另一件事,但我发现有点脏,没有比使用python列表排序更优雅的了。。。好吧,我的查询不是很常见,但我也不认为它有什么特别之处。对于后代来说——它的运行时通常比python列表排序更快,所以它通常稍微优雅一些。如果将“md5_checksum”作为order_by方法的第一个参数,它将首先由它排序,这不是我想要的。我想要按创建日期和标题排序的文件,但我只想要一个不同的md5_校验和条目。听起来你可能想使用QuerySet的
raw
方法来运行你自己的SQL,在这里对你有效。是的,这是我想的另一件事,但我发现有点脏,没有比使用python列表排序更优雅的了。。。好吧,我的查询不是很常见,但我也不认为它如此特殊。对于后代来说——它的运行时通常比python列表排序更快,所以它通常稍微优雅一些。