在Django中,有没有一种方法可以在单个查询中用相关对象直接注释查询?

2024-05-16 06:11:07 发布

您现在位置:Python中文网/ 问答频道 /正文

请考虑以下查询:

query = Novel.objects.< ...some filtering... >.annotate(
    latest_chapter_id=Max("volume__chapter__id")
)

实际上,我需要用最新的Chapter对象对每个Novel对象进行注释,所以在这个查询之后,我必须执行另一个查询以通过带注释的id选择实际的对象。我觉得这很难看。有没有办法将它们组合成一个查询?


Tags: 对象idobjectssomequerylatestmaxchapter
2条回答

不,不可能将它们组合成一个查询。

您可以阅读下面的blog post来找到两个解决方法。

是的,有可能。

要获得包含其小说中最后一章的queryset,只需执行以下操作:

from django.db.models.expressions import F
from django.db.models.aggregates import Max

Chapters.objects.annotate(last_chapter_pk=Max('novel__chapter__pk')
    ).filter(pk=F('last_chapter_pk'))

在Django 1.7测试。

相关问题 更多 >