Polymorphic serializers for Django REST Framework.
Project description
Django REST Polymorphic
Polymorphic serializers for Django REST Framework.
Overview
django-rest-polymorphic allows you to easily define serializers for your inherited models that you have created using django-polymorphic library.
Installation
Install using pip:
$ pip install django-rest-polymorphic
Usage
Define your polymorphic models:
# models.py
from django.db import models
from polymorphic.models import PolymorphicModel
class Project(PolymorphicModel):
topic = models.CharField(max_length=30)
class ArtProject(Project):
artist = models.CharField(max_length=30)
class ResearchProject(Project):
supervisor = models.CharField(max_length=30)
Define serializers for each polymorphic model the way you did it when you used django-rest-framework:
# serializers.py
from rest_framework import serializers
from .models import Project, ArtProject, ResearchProject
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ('topic', )
class ArtProjectSerializer(serializers.ModelSerializer):
class Meta:
model = ArtProject
fields = ('topic', 'artist')
class ResearchProjectSerializer(serializers.ModelSerializer):
class Meta:
model = ResearchProject
fields = ('topic', 'supervisor')
Then you have to create a polymorphic serializer that serves as a mapper between models and serializers which you have defined above:
# serializers.py
from rest_polymorphic.serializers import PolymorphicSerializer
class ProjectPolymorphicSerializer(PolymorphicSerializer):
model_serializer_mapping = {
Project: ProjectSerializer,
ArtProject: ArtProjectSerializer,
ResearchProject: ResearchProjectSerializer
}
Create viewset with serializer_class equals to your polymorphic serializer:
# views.py
from rest_framework import viewsets
from .models import Project
from .serializers import ProjectPolymorphicSerializer
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.all()
serializer_class = ProjectPolymorphicSerializer
Test it:
$ http GET "http://localhost:8000/projects/"
HTTP/1.0 200 OK
Content-Length: 227
Content-Type: application/json
[
{
"resourcetype": "Project",
"topic": "John's gathering"
},
{
"artist": "T. Turner",
"resourcetype": "ArtProject",
"topic": "Sculpting with Tim"
},
{
"resourcetype": "ResearchProject",
"supervisor": "Dr. Winter",
"topic": "Swallow Aerodynamics"
}
]
$ http POST "http://localhost:8000/projects/" resourcetype="ArtProject" topic="Guernica" artist="Picasso"
HTTP/1.0 201 Created
Content-Length: 67
Content-Type: application/json
{
"artist": "Picasso",
"resourcetype": "ArtProject",
"topic": "Guernica"
}
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
Close
Hashes for django-rest-polymorphic-0.1.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 107eb49fcbc04324ab5452e100faef956ed716d56e3946f3b754426561d62343 |
|
MD5 | 981f588e5532a69d1cd4f1b3b2336a65 |
|
BLAKE2b-256 | e245d104c60aecdd0e270794a3d68b4536aa13e935d7b472cc3d6a43a5b75b6a |
Close
Hashes for django_rest_polymorphic-0.1.4-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84b86fcfa2aacb2c599f467282b7ed7a4fe7a614f61aff2348a7ccbee62e3bb8 |
|
MD5 | b1355a8cc66424bfb1c9611d6a959ec8 |
|
BLAKE2b-256 | 82699228c14cdb8441332864065b3d0484461e7c74d1b4faa941b9712c207003 |