我正在为查询集中的每个项目生成聚合:

def get_queryset(self):
    from django.db.models import Count
    queryset = Book.objects.annotate(Count('authors'))
    return queryset

但我没有得到JSON响应中的计数.

提前谢谢你.

推荐答案

从get_queryset返回的queryset提供将通过序列化程序处理的内容列表,序列化程序控制对象的表示方式.try 在图书序列化程序中添加其他字段,如:

author_count = serializers.IntegerField(
    source='author_set.count', 
    read_only=True
)

Edit:正如其他人所说,对于返回许多结果的情况,这不是添加计数的最有效方式,因为它将命中每个实例的数据库.有关更有效的解决方案,请参阅@josé给出的答案.

Django相关问答推荐

如何显示日期?

如何在Django上创建ManyToMany管理面板?

Django测试:如何模拟Django_apps.get_Model()的LookupError

Django Prefetch上的多重过滤

django.template.response.ContentNotRenderedError: 必须渲染响应内容才能迭代

如何在 django 的列表中查找所有对象作为对象?

Django过滤器查询外键

Django 在模型中存储用户图像

获取结果集中返回的元素数的 django 模板标签是什么?

如果上下文中缺少变量,如何使 Django 模板引发错误

使用基于类的 UpdateView 在 Django 中更新用户模型

无法通过 pip 安装 Django 2.0

通过 django shell 保存图像/文件

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

如何按名称设置 django 模型字段?

在 Django 管理页面中注册应用程序中的每个表/类

在 Celery 任务中运行 Scrapy 蜘蛛

Python/Django - 避免在源代码中保存密码

如何获取 pytz 时区的通用名称

Python Django 的多线程