Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is the difference between Serializer and ModelSerializer in DRF? DRF में Serializer और ModelSerializer में क्या अंतर है?

Answer

Serializer manually defines fields for any data structure. ModelSerializer automatically generates fields from a Django model, saving boilerplate code. ModelSerializer includes automatic validation and save() method implementation.

// Regular Serializer - Manual field definition
from rest_framework import serializers

class BookSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(max_length=200)
    author = serializers.CharField(max_length=100)
    price = serializers.DecimalField(max_digits=10, decimal_places=2)
    published_date = serializers.DateField()
    
    def create(self, validated_data):
        # Must manually implement create method
        return Book.objects.create(**validated_data)
    
    def update(self, instance, validated_data):
        # Must manually implement update method
        instance.title = validated_data.get('title', instance.title)
        instance.author = validated_data.get('author', instance.author)
        instance.save()
        return instance

// ModelSerializer - Auto-generated from model
from rest_framework import serializers
from .models import Book

class BookModelSerializer(serializers.ModelSerializer):
    # Automatically generates all fields from model
    # Automatic create() and update() implementation
    # Automatic validation based on model fields
    
    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'price', 'published_date']
        read_only_fields = ['id']
        extra_kwargs = {
            'title': {'required': True},
            'price': {'min_value': 0},
        }

// Custom validation in ModelSerializer
class BookModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'price', 'published_date']
    
    def validate_title(self, value):
        if len(value) < 3:
            raise serializers.ValidationError('Title must be at least 3 characters')
        return value
    
    def validate(self, data):
        # Cross-field validation
        if data['price'] < 0:
            raise serializers.ValidationError('Price cannot be negative')
        return data

// When to use each:
// Serializer - Non-model data, custom structures, API contracts
// ModelSerializer - Model-backed resources, CRUD operations, quick prototyping

// Nested Serializers
class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ['id', 'name']

class BookDetailSerializer(serializers.ModelSerializer):
    author = AuthorSerializer()  # Nested serializer
    
    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'price']

// Using custom methods (SerializerMethodField)
class BookWithDetailSerializer(serializers.ModelSerializer):
    author_name = serializers.SerializerMethodField()
    
    def get_author_name(self, obj):
        return f"{obj.author.first_name} {obj.author.last_name}"
    
    class Meta:
        model = Book
        fields = ['id', 'title', 'author_name', 'price']

Serializer manually define करते हैं, ModelSerializer model से auto-generate होता है। ModelSerializer में create() और update() automatic होते हैं।

Was this answer clear?