# django-rest-framework-aggregates
[](https://badge.fury.io/py/drf-aggregates) [](https://travis-ci.org/uptick/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
## 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/](/example/) folder.
To enable the renderer, update your Django settings file:
```python
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'drf_aggregates.renderers.AggregateRenderer',
...
),
...
}
```
In the [Cars ViewSet](/example/api/views.py) we are outputting the result to json:
```python
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:
1. Install development requirements:
`pip3 install -r requirements-dev.txt`
2. Update your environment to point to test Django settings file:
`export DJANGO_SETTINGS_MODULE=example.settings.test`
3. Run tests:
`py.test`
[](https://badge.fury.io/py/drf-aggregates) [](https://travis-ci.org/uptick/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
## 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/](/example/) folder.
To enable the renderer, update your Django settings file:
```python
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'drf_aggregates.renderers.AggregateRenderer',
...
),
...
}
```
In the [Cars ViewSet](/example/api/views.py) we are outputting the result to json:
```python
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:
1. Install development requirements:
`pip3 install -r requirements-dev.txt`
2. Update your environment to point to test Django settings file:
`export DJANGO_SETTINGS_MODULE=example.settings.test`
3. Run tests:
`py.test`
Metadata
Release files for drf-aggregates 0.0.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| drf-aggregates-0.0.9.tar.gz | 5.3 kB | Details |
Release files / drf-aggregates-0.0.9.tar.gz
| Download URL | drf-aggregates-0.0.9.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
09868aaf6070db90de52665e280404bd5c7d4fb583632f4efa7a97e706826fe8
|
|
BLAKE2b-256 checksum How to use checksums |
d5e4afdabc54e6ee635d2ebde5d6a7aa625d075d86eef06d8545cb26101abf22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |