Serializers & ViewSets
Master advanced serializers and ViewSets — nested serialization, custom validation, viewset actions, and filtering/searching.
55 min•By Priygop Team•Last updated: Feb 2026
Advanced Serializers
- Nested Serializers: class OrderSerializer — include related objects: items = OrderItemSerializer(many=True). Control depth with depth=1 (auto-nesting) or explicit serializer fields
- Custom Validation: validate_email(self, value) for field-level, validate(self, data) for object-level. Raise serializers.ValidationError for invalid data. Cross-field validation in validate()
- SerializerMethodField: total_price = serializers.SerializerMethodField() — computed fields. def get_total_price(self, obj): return sum(item.price for item in obj.items.all())
- Write vs Read Serializers: Use different serializers for create/update (accept IDs) and retrieve (return full objects). Override to_representation() for custom output format
- Pagination: PageNumberPagination (page=1&page_size=20), LimitOffsetPagination (limit=20&offset=40), CursorPagination (cursor-based, opaque tokens). Set DEFAULT_PAGINATION_CLASS globally
- Filtering: django-filter integration — class ProductFilter(FilterSet): price_min = NumberFilter(field_name='price', lookup_expr='gte'). SearchFilter for text search, OrderingFilter for sorting