【问题标题】:Transforming a queryset to get the most recent entry, per name转换查询集以获取每个名称的最新条目
【发布时间】:2018-11-12 08:43:23
【问题描述】:

我的数据如下所示:

class Entry(models.Model):

    name = models.CharField(max_length=100)
    date = models.DateField(auto_now_add=True)
    size = models.FloatField(null=True)

如果我这样做:

qs = Entry.objects.all()

我收到一个包含所有条目的queryset。我将如何转换 queryset 以获取 另一个查询集 与最近的条目 per name

【问题讨论】:

  • 你的数据库后端是什么?
  • 你可以用subqueries来做到这一点。
  • @DanielRoseman:谢谢!我没有子查询的经验,也不知道从哪里开始。您有可以用作我用例起点的示例吗?
  • 只有我链接到的那个文档页面上的那个。我倾向于接受它并玩弄直到它起作用。
  • @schwobaseggl: db 后端是 postgres,我正在寻找基于 django-ORM 的解决方案

标签: python django


【解决方案1】:

我猜你可以写这样的东西:

qs = Entry.objects.values('name').annotate(Max('date')).order_by()

你必须先导入Max

我没有尝试我的查询集,但它应该可以工作。

【讨论】:

  • 这失败了:Cannot call only() after .values() or .values_list()
【解决方案2】:

鉴于您使用的是 postgres 后端,您可以将 distinct(*fields) 与适当的 order_by 结合使用:

qs = Entry.objects.all()
qs = qs.order_by('name', '-date').distinct('name')

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2021-03-16
    • 1970-01-01
    • 2020-04-09
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多