【问题标题】:Django ORM: Group by and MaxDjango ORM:按和 Max 分组
【发布时间】:2011-10-19 21:28:28
【问题描述】:

我有一个看起来像这样的模型:

Requests: user, req_time, req_text

在数据库中,记录可能如下所示:

id, user_id, req_time, req_text
1     1      TIMESTAMP  YES
2     1      TIMESTAMP  NO
3     2      TIMESTAMP  YES

等等

如何编写 Django ORM 查询:按用户分组请求,根据 req_text 过滤请求,以及选择结果集的最大 ID。因此,对于每个用户,我将返回与过滤条件匹配且 id 最大的一行。

【问题讨论】:

    标签: django django-orm


    【解决方案1】:
    from django.db.models.aggregates import Max
    
    request_values = Requests.objects.filter(req_text='YES') \
                     .values('user') \
                     .annotate(max_id=Max('id'))
    

    然后request_values 将如下所示:

    [
        {'user': 1, 'max_id': 1},
        {'user': 2, 'max_id': 4},
        {'user': 3, 'max_id': 5},
        {'user': 4, 'max_id': 12},
        ...
    ]
    

    【讨论】:

    • type(request_values) == django.db.models.query.ValuesQuerySet 但是 ValuesQuerySet 的元素是字典而不是 Django 对象了。有没有办法从该查询中获取 QuerySet?
    • @kev 从 GROUP BY 查询中请求模型实例没有意义,因为结果的每一行不再代表表中的单行
    • 是的,这绝对有道理
    • 我认为这是正确的,但它对我不起作用。我有完全相同的问题并且有完全相同的解决方案。当我出于某种原因添加第二个过滤器时,似乎出现了问题。
    • ...还有ٌ哪个答案比这个更好? 谢谢。它工作。
    猜你喜欢
    • 2017-03-30
    • 2012-04-26
    • 2018-03-10
    • 2016-09-25
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2021-08-01
    • 2020-05-10
    相关资源
    最近更新 更多