使用Django ORM时不能使用不同的订单

uxhixvfz  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(88)

我在Stackoverflow上看到过一些提到这个问题的帖子,但是我不知道如果查询发生变化,如何解决业务需求。
我正在尝试获取向组织发送消息的最后10个联系人

messages = (Message.objects.order_by('-created_at').distinct('contact_id'))

但是,我得到这个错误:

SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("messages"."contact_id") "messages"."id"...

我发现非重复列必须与order by列匹配,但非重复created_at并不是业务解决问题所需的。
有什么建议吗?

b1payxdu

b1payxdu1#

distinct()中的字段必须包含在内,并且必须order_by()中的第一个字段,在您的示例中为contact_id

Message.objects.order_by('contact_id', '-created_at').distinct('contact_id')

Docs: https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

相关问题