如何正确实现Django中统计店铺有作者书籍数量的查询集?
正确统计店铺中带作者书籍数量的Django查询写法
直接使用聚合函数的filter关键字参数即可实现需求,正确写法如下:
from django.db.models import Count, Q Store.objects.annotate( books_count=Count('books', filter=Q(books__author__isnull=False)) ).order_by('-books_count')
错误写法的问题
你之前的写法错误地将Q对象直接作为Count的第一个参数,而Count的第一个参数应该是要统计的关联字段名,过滤条件需要通过**filter关键字参数**传入。
代码说明
Count('books', filter=Q(books__author__isnull=False)):指定统计当前店铺关联的Book对象中,author字段不为空的记录数量- 该写法会保留所有
Store对象,即使某个店铺没有带作者的书籍,其books_count会被设为0 - 最后通过
order_by('-books_count')按统计数量倒序排列
内容的提问来源于stack exchange,提问作者Adriano174
相关产品推荐
相关产品推荐

