【问题标题】:How to get additional info using Django annotate?如何使用 Django annotate 获取附加信息?
【发布时间】:2015-02-27 15:40:13
【问题描述】:

这是一个例子:

我有表 Book (publish_time, book_name, authors), Author (author_name, books),它们是 ManyToMany。

现在我尝试为每位作者获取最新出版的书籍。

喜欢:

作者 | latest_publish_time | 书名

1 | 2015-01-01 |本书

我可以轻松获得作者的最新发布时间:

Author.objects.values('name').annotate(latest_publish_time=Max('books__publish_time'))

但我不知道如何同时获得书名。请帮忙。

【问题讨论】:

  • 我在 django 中使用原始 sql 来解决这个问题(嵌套 sql)。我不知道是否可以在“纯”django 中做到这一点。

标签: django django-models group-by


【解决方案1】:

查询它然后在 python 中过滤它呢?像这样的东西可能会满足您的需求。

all_books = Author.objects.values('id', 'name', 'books__name', 'books__publish_time').order_by('-books__publish_time')

latest_books = {}
for row in all_books:
    author_id = row[0]
    if author_id in latest_books:
        continue
    latest_books[author_id] = row

【讨论】:

  • 我最终使用原始 sql 解决了这个问题。但这看起来很有效。会试试的。谢谢。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
相关资源
最近更新 更多