Extention for Django Rest Framework to enable simple sidloading
The full documentation is at https://drf-sideloading.readthedocs.io.
Install drf-sideloading:
pip install drf-sideloading
Import Mixin SideloadableRelationsMixin:
from drf_sideloading.mixins import SideloadableRelationsMixin
Include mixin in view and define serializers dict sideloadable_relations
as shown in examples
It is required
to define and indicate primary relationship in sideloadable_relations
dict
Common Example of using library in ViewSet
class ProductViewSet(SideloadableRelationsMixin, viewsets.ModelViewSet):
"""
A simple ViewSet for viewing and editing products.
"""
queryset = Product.objects.all()
serializer_class = ProductSerializer
sideloadable_relations = {
'product': {'primary':True, 'serializer': ProductSerializer},
'category': {'serializer': CategorySerializer, 'name': 'categories'},
'supplier': SupplierSerializer,
'partner': PartnerSerializer
}
To test it out send GET
request:
GET /product/?sideload=category,partner,supplier
Response looks like:
{
"category": [
{
"id": 1,
...
}
],
"partner": [
{
"id": 1,
...
},
{
"id": 2,
...
},
{
"id": 3,
...
}
],
"product": [
{
"id": 1,
"name": "Product 1",
"category": 1,
"supplier": 1,
"partner": [
1,
2,
3
]
}
],
"supplier": [
{
"id": 1,
...
}
]
}
sideloadable_relations
dict values supports following typesserializers.Serializer
or subclassdictionary
with following keysprimary
- indicates primary modelserializer
- serializer classname
- override name of the sideloaded relation
note: invalid or unexisting relation names will be ignored and only valid relation name matches will be used
TODO
- fix documentation
- improve coverage
- python3 support
Does the code actually work?
source <YOURVIRTUALENV>/bin/activate (myenv) $ pip install tox (myenv) $ tox
Tools used in rendering this package: