Django REST framework Serialization:
Django REST
Framework serializers convert the model instances into python dictionaries, which
can then be rendered in various API appropriate formats : JSON, XML …
To work with
API first we have to create models
Create models:
In your
project models.py
module create models. For example…
from django.db import models
import uuid
class Genre(models.Model):
book_kind = models.CharField(max_length=200)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey('Author', on_delete=models.SET_NULL)
summary = models.TextField(max_length=1000)
isbn = models.CharField(max_length=13)
genre = models.ManyToManyField(Genre)
language = models.ForeignKey('Language', on_delete=models.SET_NULL)
class BookInstance(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
book = models.ForeignKey('Book', on_delete=models.SET_NULL)
imprint = models.CharField(max_length=200)
due_back = models.DateField(null=True, blank=True)
LOAN_STATUS = (
('m', 'Maintenance'),
('o', 'On loan'),
('a', 'Available'),
('r', 'Reserved'),
)
status = models.CharField(
max_length=1,
choices=LOAN_STATUS,
blank=True,
default='m',
help_text='Book availability',
)
class Author(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
date_of_birth = models.DateField(null=True, blank=True)
date_of_death = models.DateField('Died', null=True, blank=True)
class Language(models.Model):
lang_name = models.CharField(max_length=200)
Create serializer class using
ModelSerializer:
Create serializer
classes in project serializers.py
module as follows:
First import
serializers module and models
from rest_framework import serializers
from catalogapp.models import Book, Author, Genre, Language
How to serialize ManyToManyField
relation:
In the above
models, Book and Genre
has many-to-many relationship.
First create
GenreSerializer and
then modify the BookSerializer
by adding many=True in ManyToManyField
relation as follows..
class GenreSerializer(serializers.ModelSerializer):
class Meta:
model = Genre
fields = ['book_kind']
class BookSerializer(serializers.ModelSerializer):
genre = GenreSerializer(read_only=True, many=True)
class Meta:
model = Book
fields = ['title','genre']
How to serialize Foreignkey
relation:
In the above
models, Book and Author
& Book and Language
has many-to-one relationship.
First create
AuthorSerializer & LanguageSerializer
and then modify the BookSerializer
by adding many=True
in Foreignkey relation as
follows..
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']
class LanguageSerializer(serializers.ModelSerializer):
class Meta:
model = Language
fields = ['lang_name']
class BookSerializer(serializers.ModelSerializer):
genre = GenreSerializer(read_only=True, many=True)
author = AuthorSerializer(many=True)
language = LanguageSerializer(many=True)
class Meta:
model = Book
fields = ['title', 'author', 'summary', 'isbn', 'genre', 'language']
Now you can
inspect all the fields in serializer instance by printing its representation.
Open shell
by giving the command python
manage.py shell
Then try the
following..
>>>
from catalogapp.serializers import BookSerializer, AuthorSerializer,
GenreSerializer, LanguageSerializer
>>>
serializer = BookSerializer()
>>>
print(repr(serializer))
BookSerializer():
…………………
After that
write Django views using serializers
And then map
views and urls in urls.py
module
Now start up
Django development server python
manage.py runserver
We can test
our API by installing httpie
using pip
pip install httpie
C:\Users\>http http://127.0.0.1:8000/catalogapp/
HTTP/1.1
200 OK
Content-Length:
1665
……………………
No comments:
Post a Comment