通过RelatedManager的__count过滤QuerySet

时间:2014-03-04 11:11:29

标签: django django-queryset django-related-manager

我有一个QuerySet我想按related_name的计数进行过滤。目前我有这样的事情:

objResults = myObjects.filter(Q(links_by_source__status=ACCEPTED),Q(links_by_source__count=1))

但是,当我运行此命令时,我收到以下错误消息:

Cannot resolve keyword 'count' into field

我猜这个查询是在每个links_by_source连接上单独运行的,因此没有count函数,因为它不是我正在使用的QuerySet。有没有一种过滤方式,以便对于返回的每个对象,links_by_source的数量正好是1?

1 个答案:

答案 0 :(得分:2)

您需要使用聚合函数来获取计数,然后才能对其进行过滤。

from django.db.models import Count
myObjects.filter(
  links_by_source__status=ACCEPTED).annotate(link_count=Count('links_by_source')
).filter(link_count=1)

注意,你应该注意这里的order of the annotate and filter:该查询计算ACCEPTED链接的数量,不确定你是否想要那个,或者你想要检查所有链接是1。