A Python package that exposes the Django model queryset aggregate functions to the DRF API.
Project description
django-rest-framework-aggregates
Exposes aggregation features of the Django model queryset to the DRF API.
Requirements
- Python 3.6+
- Django 1.11+
- Django Rest Framework 3.5.3+
Overview
This renderer overwrites default behaviour for calls made to api v2 .agg endpoints.
Supports GET
calls to list endpoints in the format:
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)
Supports date part extraction for aggregation:
endpoint.agg/?group_by[created__year]&aggregate[Count]=id
Supports choices to representation extract:
endpoint.agg/?group_by[choiceField]&aggregate[Count]=id
Support aggregating over multiple fields, either of
endpoint.agg/?aggregate[Sum]=id&aggregate[Sum]=number
endpoint.agg/?aggregate[Sum]=id,number
Custom Aggregations
The default aggregate functions supported are defined in django.db.models.aggregates
.
Custom aggregate functions have been defined in drf_aggregates.aggregates
User defined aggregation are passed to a custom queryset manager calculate_aggregates
as kwargs if defined.
Custom aggregate functions set on the queryset should return a dictionary of field names to aggregate functions, which will then be processed with the other aggregates.
Examples
Example setup can be found in the example/ folder.
To enable the renderer, update your Django settings file:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'drf_aggregates.renderers.AggregateRenderer',
...
),
...
}
In the Cars ViewSet we are outputting the result to json:
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
data = request.accepted_renderer.render({'queryset': queryset, 'request': request})
return Response(data, content_type=f'application/json')
Tests
In order to run tests locally:
-
Install development requirements:
pip3 install -r requirements-dev.txt
-
Update your environment to point to test Django settings file:
export DJANGO_SETTINGS_MODULE=example.settings.test
-
Run tests:
py.test
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for drf_aggregates-0.0.13-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 629121252cca6e192c48964d1444049c2a4e868b4ad128ba4c123446a3ef0cc5 |
|
MD5 | 93cfd47abdfcb8d1b7ff4b9aa4922cc7 |
|
BLAKE2b-256 | 418efcf8c8012207debdefc2fafafbdfe0376104bd79daaa91010f1420c26ec7 |