【问题标题】:Django group / aggregationDjango 组/聚合
【发布时间】:2011-01-20 00:23:35
【问题描述】:

我有以下带有示例数据的结构:

id   season_id    title 
1    1            Intro
2    1            Second part
3    1            Third part
4    4            Other intro
5    4            Other second part

(不要问为什么),其中 season_id 总是指向本季第一集的 id...

我想要什么,得到关注:

1    1            Intro
4    4            Other intro

从技术上讲,这是季节的第一集 - 所有 season_eid

最低的条目

我正在使用以下查询来获取它们的 ID:

Movie.objects.filter(category_type = 2).values('season_eid').annotate(models.Min('season_eid'))

并且拥有 id 我可以使用 django orm __in 构造获取对象的所有数据。

我可以只使用一个查询进行分组/注释并获取所有字段/值吗? values + annotate 只给了我一个字典列表,但我想用其他字段来获取正确的对象(最低值/season_eid 的最小值)。

【问题讨论】:

  • 是的,有可能。但是您应该包含更多模型信息,例如外键和类别,以便我们能够提供帮助
  • 好吧,忘记外键和“category_type”——我只对季节感兴趣。
  • 看看我更新的答案。其实很简单。

标签: python django orm group-by annotate


【解决方案1】:
Movie.objects.annotate(category_min_season = models.Min('category__season_id')).filter(season_id=category_min_season)

假设您的类别对电影模型具有 FK。

更新:

其实你甚至不需要注解;感谢您存储在表中的非规范化数据。

你可以这样做:

Model.objects.filter(id=Q(season_id))

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 2014-07-15
    • 2018-08-19
    • 2019-12-17
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2020-06-17
    • 2019-08-05
    相关资源
    最近更新 更多