python - 如何创建一个查询?
问题描述
一位作者有很多书。数据库中有许多作者的书籍。需要获取作者的最新书籍。在一个查询中。
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
解决方案
您可以简单地使用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]))
推荐阅读
- mysql - --defaults-group-suffix 在 .my.cnf 中无法使用正确的凭据
- android - 如何更改导航抽屉菜单背景?
- javascript - 无法获取数组返回类型的副本必须具有返回迭代器的“[Symbol.iterator]()”方法
- reactjs - 如何在反应js中的链接本地主机上删除#
- swift - 在 SwiftUI 中更新 ScrollView 的正确方法是什么?(MacOS 应用程序)
- mysql - 我正在为 DATA_ADD 苦苦挣扎
- javascript - 为什么这个 javascript 函数不从 for 循环返回多个对象?
- html - 在 html 中链接联系表单时出现错误我已经尝试了一切
- c# - 我可以在同一个 Web 应用中拥有 2 个(或更多)不同的 ASP.NET Core 编程模型吗?
- scala - 无形联积子类型