Python 通过值查询集对查询集进行注释
我想在queryset中注释对象的计数,我知道该怎么做,但我希望计数的对象有自己的过滤 这很有效Python 通过值查询集对查询集进行注释,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我想在queryset中注释对象的计数,我知道该怎么做,但我希望计数的对象有自己的过滤 这很有效 first_model_qs = FirstModel.objects.filter(do a bunch of filtering) grouped_values_qs = first_model_qs.values('second_model').annotate(Count('pk')) 因此,我现在有了一个很好的查询集,其中包含所有按second\u modelid分组的first\u m
first_model_qs = FirstModel.objects.filter(do a bunch of filtering)
grouped_values_qs = first_model_qs.values('second_model').annotate(Count('pk'))
因此,我现在有了一个很好的查询集,其中包含所有按second\u model
id分组的first\u model
计数。太棒了
我现在想做的是:
secound_model_qs = SecondModel.objects.annotate(first_model_count = grouped_values_qs)
然后能够说:secound\u model\u qs.first().first\u model\u count
这可能吗?我想你可以用一个更具体的方法来做
from django.db.models import OuterRef, Subquery, Count
first_model_query = (FirstModel.objects
# Do the filtering
.filter(second_model=OuterRef('pk'))
# add grouping
.values('second_model')
# do the aggregation
.annotate(cnt=Count('pk'))
# now return only a single column
.values('cnt')
)
secound_model_qs = SecondModel.objects.annotate(
first_model_count=Subquery(first_model_query)
)