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.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53937742712ea8846d5a3268a263e5d78cdf000f5401fefedf95bf74c4f12727 |
|
MD5 | cdd1d7efe05441dba73f0ed3ce0cdaae |
|
BLAKE2b-256 | 1276e87e63ca882c6ea4d702a78fb688efd60e71c74d4b3e1112771c5e5e7db1 |
Close
Hashes for django_rest_polymorphic-0.1.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aab4b3379ca89efa4f9a93b920430e4037e8c1b548fdcb13f03e3f455a39a895 |
|
MD5 | a23a4e0177b42093c956346b46bde135 |
|
BLAKE2b-256 | 6a98c55c823699ff204c2b052664d134e751d31c8980be2493653b2b08407b44 |