我使用以下查询:
def get_queryset(self):
posts = Post.objects.filter(topic_id=OuterRef('pk'))
unread_posts = posts.exclude(read_by=self.request.user)
return Topic.objects.all().annotate(is_unread=Exists(unread_posts),
number_of_replies=Subquery(posts.count())).order_by('-latest_post')
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误消息:
This queryset contains a reference to an outer query and may only be used in a subquery.
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我明确设置了Subquery(posts.count()).
有人可以给我一个提示吗?
问题是它.count()会急切地评估查询,因此Subquery(..)从未使用过。但即使这行得通,无论如何这样做也不是一个好主意。
您可以使用 JOIN 进行计数,例如:
from django.db.models import Count, Exists, OuterRef
def get_queryset(self):
posts = Post.objects.filter(topic_id=OuterRef('pk'))
unread_posts = posts.exclude(read_by=self.request.user)
return Topic.objects.annotate(
is_unread=Exists(unread_posts),
number_of_replies=Count('post')
).order_by('-latest_post')Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3168 次 |
| 最近记录: |