代码之家  ›  专栏  ›  技术社区  ›  Tudor

Django ORM集团

  •  3
  • Tudor  · 技术社区  · 15 年前

    这个PostgreSQL查询解决了我的问题,但我不知道如何将它放到django-orm中。

    SELECT DISTINCT ON (to_email) * FROM (SELECT * FROM invitation_invitation ORDER BY date_invited DESC) AS sub
    

    从项目列表中,我希望“收件人电子邮件”列的所有不同行,以及电子邮件重复的位置,它应该选择最新的日期(邀请日期)

    2 回复  |  直到 15 年前
        1
  •  3
  •   Hank Gay    15 年前

    这里是 overview on doing aggregation in Django ORM 特别是 values 功能。

    更新: 把它付诸行动,类似于

    Invitation.objects.values('to_email').annotate(date_invited=Max('date_invited'))
    

    应该适合你的例子。

    更新2: 费伦说得对,这只会找回 to_email 字段和 date_invited 注释。如果其他信息是必需的,那么在Python中进行“仅限最新”的过滤可能是最简单的。建议的解决方案更适合最初只显示摘要数据列表并根据请求提供更多详细信息的情况(假设摘要数据足以唯一标识记录)。

        2
  •  1
  •   Ferran    15 年前

    我想你不能只用一个查询就用django-orm完成这个任务。ORM不生成这种子查询。 您可以使用connection对象自己编写SQL,也可以使用python代码进行子查询并获得不同的步骤。

    编辑

    汉克·盖伊提出的解决方案是可以的,但只有 日期邀请 电邮 字段和问题是获取最新记录的所有字段。