如何从相关表中获取最后几行



需要帮助处理orm请求。

有两张桌子。AuthorBook(例如名称,所以您不需要查看逻辑(,通过FK链接。

class Book(models.Models):
title = models.Charfield(...)


class Author(models.Model):
book = models.ForeignKey(Book)

需要按书对作者进行分组,并循环浏览。问题是如何只选择每本书的最后50位作者。

我可以写这个:

for book in Book.all()
for author in  book.author_set.all()[:50]:
....

但这不是一个最佳解决方案。

错误的答案,我没有意识到切片意味着一个新的查询。我的坏,不要往下看。

要优化查询,您需要使用prefetch_related((方法:

预取延迟((返回QuerySet将在单个批次中自动检索相关对象对于每个指定的查找。

这与select_related的目的相似,因为两者都是旨在阻止由访问相关对象,但策略完全不同。

select_related通过创建SQL联接并包含字段来工作SELECT语句中相关对象的。由于这个原因,select_related获取同一数据库查询中的相关对象。然而,为了避免由于通过"多"关系加入,select_related仅限于单值关系-外键和一对一。

另一方面,prefetch_related对每个执行单独的查找关系,并在Python中执行"连接"。这允许它预取多对多和多对一对象,这是无法完成的除了外键和一对一之外,还使用select_relatedselect_related支持的关系。

for book in Book.all().prefetch_related()
for author in  book.author_set.all()[:50]

您还需要订购您的book.author_set查询集,以确保获得最新的条目。

相关内容

  • 没有找到相关文章

最新更新