首页 > 解决方案 > 使用 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)

标签: djangodjango-rest-framework

解决方案


您需要按集合对帖子进行分组并返回每个集合的计数。

将此方法添加到您的视图集中:(您也需要导入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)

推荐阅读