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()表达式需要在排序中首先包含这些字段,才能执行消除重复项所需的分组。