django - 使用 Django Rest Framework 计算对象
问题描述
我有网址api/v1/posts/
。如果我们使用来自该 url 的 GET 请求,我们可以看到所有对象。例如:
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"url": "http://127.0.0.1:8000/api/v1/posts/11/",
"id": 12,
"name": "Sample name",
"type": "Shirt",
"collection": "Winter 2020"
}
]
}
我们需要创建功能 -
我们可以使用过滤器创建 GET 请求。在我们的例子中,我们需要过滤“type”:“Shirt”,我们可以看到带有 count 的“Collection”(计算所有系列的衬衫)
例如:
{
"collection" : "Winter 2020"
"result" : [
{
"count": 12
}
]
}
等等...如何使用 Django Rest Framework 创建它?
UPD(添加视图):
class PostViewSet(LikedMixin, viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
authentication_classes = (TokenAuthentication, SessionAuthentication, )
filter_backends = (DjangoFilterBackend, )
filterset_fields = ('name', 'type')
def perform_create(self, serializer):
serializer.save(author=self.request.user)
解决方案
您需要按集合对帖子进行分组并返回每个集合的计数。
将此方法添加到您的视图集中:(您也需要导入from django.db.models import Count
。)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
result_list = list(queryset.values('collection').annotate(count=Count('collection')))
return Response(result_list)
推荐阅读
- jquery - 未捕获的 SyntaxError:jQuery 中的意外标记“(”
- python - 如何使用 output.py 以正确的格式查看文本文件?
- sql - 找到确切的重叠时间
- c# - Mathf.Pow 在 C# 上显示无穷大
- mysql - SQL:子查询中的列没有出现
- sql - SQL 日期过滤器:当开始日期 = 结束日期时返回结果
- java - 根据 StackedBarChart 中的条件对值进行分类和更改颜色
- docker - 需要帮助了解如何从 docker.io 运行应用程序
- node.js - 将 socket.io(^3.0.0) 与 Strapi Server("3.2.5") CORS 错误集成
- reactjs - setState 在本机反应中不切换值