Django:获取最近的不同对象

Django:获取最近的不同对象,django,django-orm,Django,Django Orm,假设我有一个WeatherReport对象,其中包含字段date、temperature、和city 我想获取每个城市的所有最新天气报告对象。我想我会这样做 WeatherReport.objects.order_by('-date').distinct('city') 但这失败了,返回了错误 ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions 这应该行得通。当我遇到

假设我有一个
WeatherReport
对象,其中包含字段
date
temperature
、和
city

我想获取每个城市的所有最新
天气报告
对象。我想我会这样做

WeatherReport.objects.order_by('-date').distinct('city')
但这失败了,返回了错误

ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

这应该行得通。当我遇到这个问题时,它对我起了作用

WeatherReport.objects.order_by('city', '-date').distinct('city')

似乎
表达式上的
DISTINCT必须与最左侧的
ORDER BY
表达式匹配。因此,通过将您在
中使用的列设置为distinct
作为
order\u by
中的第一列,我认为它应该可以工作。

可能您忘记了请求中的选择器(all,filter…):WeatherReport.objects.all().order\u by('-date')。distinct('city')可能与数据库后端相关。在上的示例中,他们注意到,列出的大多数只适用于PostgreSQL。@Anish是对的。DISTINCT()表达式需要在排序中首先包含这些字段,才能执行消除重复项所需的分组。