首页 > 解决方案 > 如何创建一个查询?

问题描述

一位作者有很多书。数据库中有许多作者的书籍。需要获取作者的最新书籍。在一个查询中。

class Autor(models.Model):
    name = models.Charfield()


class Book(models.Model):
    name = models.Charfield()
    author = models.ForegnKey("Autors", models.CASCADE)
    created_at = models.DatetimeField(auto_now_add=True)

# its a many queries
last_books = []
for author in Autor.objects.all():
    last_book = Book.object.filter(autor=autor).latest("created_at")
    last_books.append(last_book)
# need one query

标签: pythondjangodjango-orm

解决方案


您可以简单地使用Subquery

from django.db.models import Subquery, OuterRef

books = Book.objects.filter(author=OuterRef('pk'))
authors = Author.objects.annotate(book=Subquery(books.order_by('-created').values('name')[:1]))

推荐阅读