gpt4 book ai didi

python - Django 1.8 : Join latest entry to foreign key

转载 作者:行者123 更新时间:2023-11-29 19:07:10 26 4
gpt4 key购买 nike

假设我有一个简单的模型(从 django 文档借用):

class Author(models.Model):
name = models.CharField(max_length=100)

class Book(models.Model):
name = models.CharField(max_length=300)
author = models.ForeignKey(Author)
pubdate = models.DateField()

我想获取作者及其最新书籍的列表,其中该作者可能没有书籍。我可以使用原始查询来完成此操作,但是可以在 ORM 的范围内有效地完成此操作(即无需重复访问数据库)吗?

我想出的最好的办法是:

for a in Author.objects.prefetch_related('book_set'):
a.book_set.latest('pubdate')

这会导致每个作者进行额外的查询。似乎最新的无法通过预取的查询集来确定。

欣赏任何方向。

最佳答案

我能够通过显式定义预取查询集来解决这个问题,以获取每个作者的最新书籍。这让我可以使用 .all() ,它只包含最新的书籍(或不包含),并且不会引起另一个查询。

latest_books = Book.objects.annotate(latest=Max('author__book__pubdate')).filter(pubdate=F('latest'))

for a in Author.objects.prefetch_related(Prefetch('book_set', queryset=b_query)):
a.book_set.all()[0]

关于python - Django 1.8 : Join latest entry to foreign key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43399658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com