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
File details
Details for the file drf-aggregates-0.0.13.tar.gz
.
File metadata
- Download URL: drf-aggregates-0.0.13.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.8.0 tqdm/4.50.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc309bcd48eee3aed8a54504d627bd5523c4ceadbd0ebab4eb76300cbc863fbf |
|
MD5 | 99965cd8f203c05a6a3db7ae7b118969 |
|
BLAKE2b-256 | cd5605b2fac5fe4d24b579bc97624eac7486eaf3c269924ec196a74287b16358 |
File details
Details for the file drf_aggregates-0.0.13-py3-none-any.whl
.
File metadata
- Download URL: drf_aggregates-0.0.13-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.8.0 tqdm/4.50.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 629121252cca6e192c48964d1444049c2a4e868b4ad128ba4c123446a3ef0cc5 |
|
MD5 | 93cfd47abdfcb8d1b7ff4b9aa4922cc7 |
|
BLAKE2b-256 | 418efcf8c8012207debdefc2fafafbdfe0376104bd79daaa91010f1420c26ec7 |