Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
# blog/serializers.py — DRF serializers from rest_framework import serializers from django.contrib.auth import get_user_model from .models import Post, Tag, Category User = get_user_model() class TagSerializer(serializers.ModelSerializer): class Meta: model = Tag fields = ['id', 'name', 'slug'] class AuthorSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'email'] class PostSerializer(serializers.ModelSerializer): author = AuthorSerializer(read_only=True) tags = TagSerializer(many=True, read_only=True) tag_ids = serializers.PrimaryKeyRelatedField( queryset=Tag.objects.all(), many=True, write_only=True, source='tags', ) url = serializers.SerializerMethodField() reading_time = serializers.SerializerMethodField() class Meta: model = Post fields = [ 'id', 'title', 'slug', 'author', 'category', 'body', 'tags', 'tag_ids', 'status', 'published_at', 'url', 'reading_time', ] read_only_fields = ['slug', 'published_at'] def get_url(self, obj): request = self.context.get('request') return request.build_absolute_uri(f'/api/posts/{obj.pk}/') def get_reading_time(self, obj): return max(1, round(len(obj.body.split()) / 200)) def validate_title(self, value): if len(value) < 5: raise serializers.ValidationError('Title must be at least 5 characters.') return value
Result
Open