我有一个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?
答案 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。