Python 通过值查询集对查询集进行注释

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

我想在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 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)
)