gpt4 book ai didi

django - 在 Django 中结合 order_by 和 distinct

转载 作者:行者123 更新时间:2023-11-29 13:35:18 25 4
gpt4 key购买 nike

大家好

我读了很多关于它的文章,我可以理解缺少这样的实现,但我不明白为什么我不能使用 Django 来模拟 SELECT (SELECT DISTINCT[...] ) 订购方式。

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

我希望能够运行这个:

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 的方法,我会很乐意拥有它。谢谢!

最佳答案

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

关于django - 在 Django 中结合 order_by 和 distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com