1

大家好,

我读了很多关于它的内容,我可以理解缺少这样的实现,但我不明白为什么我不能用 Django 模拟 SELECT (SELECT DISTINCT[...]) ORDER BY 的行为.

我知道如果没有 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,但失败了。

因此,基于,我必须回到 python 排序来做同样的事情:

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

如果有人有更优雅的解决方案,一种强制 Django 提交第一个 SELECT DISTINCT 的方法,我会很高兴拥有它。谢谢 !

4

1 回答 1

1

在该order_by方法中,您可以尝试添加'md5_checksum'为第一个参数。这可能有助于它正确订购,除非我误解了这个问题。

于 2013-01-04T17:44:35.140 回答