Serializers
Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can then be easily rendered into JSON, XML or other content types.
They also provide deserialization, validating parsed data before saving it back to complex types.
Creating a basic Serializer
A basic serializer is very similar to a Django Form.
python
from rest_framework import serializers
class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()ModelSerializers
Often, your serializers map closely to Django models. The ModelSerializer class provides a shortcut that lets you automatically create a Serializer class with fields that correspond to the Model fields.
python
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()python
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ['id', 'title', 'body']
# Use fields = '__all__' to include all fieldsValidation
You can add custom validation to your serializers using .validate_<field_name> or .validate.
python
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ['title', 'body']
def validate_title(self, value):
if 'django' not in value.lower():
raise serializers.ValidationError("Blog post must be about Django")
return value