向drf api公开django模型queryset聚合函数的python包。
drf-aggregates的Python项目详细描述
django rest框架聚合
向drf api公开django模型queryset的聚合特性。
要求
- Python3.6+
- Django 1.11+
- django rest framework 3.5.3+
概述
此呈现程序覆盖对APIv2.agg终结点的调用的默认行为。
支持GET
调用以以下格式列出终结点:
endpoint.agg/?aggregate[Count]=(field to count)
endpoint.agg/?aggregate[Sum]=(field to sum)
endpoint.agg/?aggregate[custom_function]=arguments
endpoint.agg/?group_by[field to group by]&aggregate[Count]=id
endpoint.agg/?group_by[field to group by]&aggregate[Count]=id&aggregate[Sum]=(field to sum)
支持数据部分提取以进行聚合:
endpoint.agg/?group_by[created__year]&aggregate[Count]=id
支持选择表示提取:
endpoint.agg/?group_by[choiceField]&aggregate[Count]=id
自定义聚合
支持的默认聚合函数在django.db.models.aggregates
中定义。
自定义聚合函数已在drf_aggregates.aggregates
用户定义的聚合将作为kwargs(如果已定义)传递给自定义queryset管理器calculate_aggregates
。
在queryset上设置的自定义聚合函数应该返回一个字段名字典给聚合函数,然后将与其他聚合一起处理。
示例
示例安装程序可以在example/文件夹中找到。
要启用渲染器,请更新django设置文件:
REST_FRAMEWORK={'DEFAULT_RENDERER_CLASSES':('drf_aggregates.renderers.AggregateRenderer',...),...}
在Cars ViewSet中,我们将结果输出到json:
deflist(self,request,*args,**kwargs):queryset=self.filter_queryset(self.get_queryset())data=request.accepted_renderer.render({'queryset':queryset,'request':request})returnResponse(data,content_type=f'application/json')
测试
为了在本地运行测试:
安装开发要求:
pip3 install -r requirements-dev.txt
更新您的环境以指向测试django设置文件:
export DJANGO_SETTINGS_MODULE=example.settings.test
运行测试:
py.test