大家好,
我读了很多关于它的内容,我可以理解这样的实现缺失了,但我无法理解为什么我不能用Django模拟SELECT的行为(SELECT DISTINCT [...] )订购。
我知道如果没有ORDER BY子句中的列,PostgreSQL就不支持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,这是失败的。
因此,基于this,我必须回到python排序来做同样的事情:
b = sorted(b, key=lambda x: (x.create_date, x.title), reverse=True)
如果有人有一个更优雅的解决方案,一种强制Django提交第一个SELECT DISTINCT的方法,我会很乐意拥有它。谢谢!
答案 0 :(得分:1)
在order_by
方法中,您可以尝试添加'md5_checksum'
作为第一个参数。这可能有助于它正确排序,除非我误解了这个问题。