https://github.com/wccdev/drfexts
extensions for django drf restframework
https://github.com/wccdev/drfexts
django-rest-framework python
Last synced: about 1 year ago
JSON representation
extensions for django drf restframework
- Host: GitHub
- URL: https://github.com/wccdev/drfexts
- Owner: wccdev
- License: apache-2.0
- Created: 2020-07-07T08:33:55.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2024-11-16T09:44:37.000Z (over 1 year ago)
- Last Synced: 2025-04-10T10:03:13.883Z (about 1 year ago)
- Topics: django-rest-framework, python
- Language: Python
- Homepage:
- Size: 452 KB
- Stars: 7
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
drfexts
=======
[](https://github.com/aiden520/drfexts/blob/master/LICENSE)
[](https://pypi.python.org/pypi/drfexts)

[](https://www.djangoproject.com/)
[](https://www.django-rest-framework.org)
[](https://python-poetry.org/)
[](https://github.com/ambv/black)
**Extensions for Django REST Framework**
Installation
------------
``` {.bash}
$ pip install drfexts
```
Usage
-----
*views.py*
``` {.python}
from rest_framework.views import APIView
from rest_framework.settings import api_settings
from drfexts.viewsets import ExportMixin
class MyView (ExportMixin, APIView):
...
```
Ordered Fields
--------------
By default, a `CSVRenderer` will output fields in sorted order. To
specify an alternative field ordering you can override the `header`
attribute. There are two ways to do this:
1) Create a new renderer class and override the `header` attribute
directly:
> ``` {.python}
> class MyUserRenderer (CSVRenderer):
> header = ['first', 'last', 'email']
>
> @api_view(['GET'])
> @renderer_classes((MyUserRenderer,))
> def my_view(request):
> users = User.objects.filter(active=True)
> content = [{'first': user.first_name,
> 'last': user.last_name,
> 'email': user.email}
> for user in users]
> return Response(content)
> ```
2) Use the `renderer_context` to override the field ordering on the
fly:
> ``` {.python}
> class MyView (APIView):
> renderer_classes = [CSVRenderer]
>
> def get_renderer_context(self):
> context = super().get_renderer_context()
> context['header'] = (
> self.request.GET['fields'].split(',')
> if 'fields' in self.request.GET else None)
> return context
>
> ...
> ```
Labeled Fields
--------------
Custom labels can be applied to the `CSVRenderer` using the `labels`
dict attribute where each key corresponds to the header and the value
corresponds to the custom label for that header.
1\) Create a new renderer class and override the `header` and `labels`
attribute directly:
> ``` {.python}
> class MyBazRenderer (CSVRenderer):
> header = ['foo.bar']
> labels = {
> 'foo.bar': 'baz'
> }
> ```
Pagination
----------
Using the renderer with paginated data is also possible with the new
[PaginatedCSVRenderer]{.title-ref} class and should be used with views
that paginate data
For more information about using renderers with Django REST Framework,
see the [API
Guide](http://django-rest-framework.org/api-guide/renderers/) or the
[Tutorial](http://django-rest-framework.org/tutorial/1-serialization/).
Running the tests
-----------------
To run the tests against the current environment:
``` {.bash}
$ ./manage.py test
```
### Changelog
1.0.0
-----
- Initial release
## Thanks
[](https://www.jetbrains.com/?from=drfexts)