首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django查询:按字段分组并获取每个组的最新条目

Django查询:按字段分组并获取每个组的最新条目
EN

Stack Overflow用户
提问于 2017-10-23 21:00:57
回答 1查看 2.8K关注 0票数 2

下表载于Django-1.11:

代码语言:javascript
复制
class Market(models.Model):
    slug = models.SlugField(...)
    active = models.DateTimeField(...)

如果slug是避免重复值的外键,那就太好了,但事实并非如此,我正在处理第三方应用程序。

代码语言:javascript
复制
data = [
    {'id': 1, 'slug': 'test-1', 'active': 'datetime.datetime(2017, 9, 18, 10, 43, 8, 581046, tzinfo=<UTC>)'}, 
    {'id': 2, 'slug': 'test-1', 'active': 'datetime.datetime(2017, 9, 20, 10, 43, 8, 581046, tzinfo=<UTC>)'}, 
    {'id': 3, 'slug': 'test-2', 'active': 'datetime.datetime(2017, 9, 10, 10, 43, 8, 581046, tzinfo=<UTC>)'},
    {'id': 4, 'slug': 'test-2', 'active': 'datetime.datetime(2017, 9, 19, 10, 43, 8, 581046, tzinfo=<UTC>)'},
]

我正在寻找一个查询,这将返回最新的条目与鼻涕虫test-1和最近的条目与鼻涕虫test-2

annotate我只是收到结果和他们的日期时间:

代码语言:javascript
复制
Market.objects.values('slug').annotate(Max('active'))
Out[11]: <QuerySet [
{'active__max': datetime.datetime(2017, 9, 18, 10, 43, 8, 581046, tzinfo=<UTC>), 'slug': 'test-1'},
{'active__max': datetime.datetime(2017, 9, 20, 10, 43, 8, 581046, tzinfo=<UTC>), 'slug': 'test-1'},
{'active__max': datetime.datetime(2017, 9, 10, 10, 43, 8, 581046, tzinfo=<UTC>), 'slug': 'test-2'},
{'active__max': datetime.datetime(2017, 9, 19, 10, 43, 8, 581046, tzinfo=<UTC>), 'slug': 'test-2'}
]>

这个结果似乎没有遵循医生们。我做错了什么?是SlugField不允许“分组”吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-23 21:42:18

看起来,您需要通过结果查询中的order_by()添加空默认订购-或按顺序订购,可以将额外的字段添加到group by。

试一试:

代码语言:javascript
复制
Market.objects.values('slug').annotate(Max('active')).order_by()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46898464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档