django - Django:对外部查询的引用只能在子查询中使用
问题描述
我使用以下查询:
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')
不幸的是,我收到以下错误消息:
This queryset contains a reference to an outer query and may only be used in a subquery.
我很困惑,因为我明确设置了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')
推荐阅读
- java - System.currentTimeMillis()/1000 如何在 JAVA 中工作
- sql - 版本化数据库记录的数据库设计,多视图和少量更新
- java - 将菜单栏添加到 Gridpane
- html - 如何在电子应用程序中制作圆角
- git - 将现有项目添加到 GitHub
- javascript - Angular.js 6.1.0 - 变量未传递给视图
- java - android.content.res.Resources$NotFoundException:Recycleview 适配器类中的资源 ID #0x7f07007e
- postgresql - 使用 postgresql_fdw 导入外部类型
- javascript - 将 Button 作为 TableRowColumn 放在 material-ui 表中
- sql - SQL 查询到 XML 格式