【问题标题】:Django ORM: How to query for the latest row based on a another attributeDjango ORM:如何根据另一个属性查询最新行
【发布时间】:2016-03-25 15:58:47
【问题描述】:

我有一张桌子:

product_id  |  sales_rank  |  updated_on
1           |  572         |  2015-12-17 15:19:41
2           |  1000        |  2015-12-17 15:19:42
1           |  500         |  2015-12-18 15:19:41
2           |  1659        |  2015-12-18 15:19:42

我有兴趣在 Django ORM 中只选择此表的最后两行的查询。

我想要所有唯一产品 ID 的最新更新行。我怎样才能做到这一点?

这是我现在做的肮脏(且昂贵)的方式:

sorted(Product.objects.distinct("product_id"), key=operator.attrgetter('sales_rank'))

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

    请尝试:

    from django.db.models import Max
    Product.objects.values('product_id').annotate(latest=Max('updated_on'))
    

    【讨论】:

    • 这很好,但我怎样才能让这个返回 ORM?然后我想对返回集应用一些过滤器。
    • 您可以预先应用过滤器,然后执行values。如果您需要其他字段,您可以在之后做values('product_id', 'sales_rank', 'random_field')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2014-02-10
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多