我正在使用Django 1.11版,并且正在尝试执行以下查询。
queryset = Series.objects.prefetch_related(
Prefetch(
'issues',queryset=Issue.objects.filter(hide=False)
)
)
.filter(hide=False, issues__hide=False)
.annotate('issue_count=Count('issues')
)
查询运行得很好,问题是带注释的issue_count值不正确。与其回读预取查询集的计数,不如回读整个相关问题属性。
有什么建议吗?
答案 0 :(得分:0)
在批注中使用Django 1.11时,必须使用子查询来获得所需的过滤关系计数。
queryset = Series.objects.prefetch_related(
Prefetch('issue_series', queryset=Issue.objects.filter(hide=False).filter(issue_query_set))) \
.filter(hide=False) \
.annotate(issue_count=Subquery(
Issue.objects.filter(
series=OuterRef('pk'),
hide=False
)
.filter(issue_query_set)
.values('series')
.annotate(cnt=Count('pk'))
.values('cnt'),
output_field=IntegerField()
)
)\
.filter(issue_count__gt=0)