ViewSet的总计结果导致Django Rest Framework

Ben*_*174 2 django django-rest-framework

我有一个ViewSet,它输出一组结果:

{
    "count": 19355,
    "next": null,
    "previous": null,
    "results": [
        {
            "duration": 5,
            ...
        },
        {
            "duration": 5,
            ...
        },
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想汇总结果持续时间的总和,就在"计数"旁边那个方便的小顶部区域.我知道如何使用annotate和sum在查询集中执行此操作,但我没有看到将其放入ViewSet输出的方法.

此数据集的所需输出将是:

{
    "count": 19355,
    "total_duration": 10,
    "next": null,
    "previous": null,
    "results": [
        {
            "duration": 5,
            ...
        },
        {
            "duration": 5,
            ...
        },
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

我很感激帮助!

Mic*_*oni 6

我建议使用专用的分页类来实现它.

class PaginationWithAggregates(pagination.LimitOffsetPagination):
    def paginate_queryset(self, queryset, request, view=None):
        self.total_duration = queryset.aggregate(total_duration=Sum('duration'))['total_duration']
        return super(PaginationWithAggregates, self).paginate_queryset(queryset, request, view)

    def get_paginated_response(self, data):
        paginated_response = super(PaginationWithAggregates, self).get_paginated_response(data)
        paginated_response.data['total_duration'] = self.total_duration
        return paginated_response
Run Code Online (Sandbox Code Playgroud)

不要忘记在GenericView上声明这个分页类.