DRF serializers: SerializerMethodField, SlugRelatedField, validate_field, and create().
DRF Serializers
class PostSerializer(serializers.ModelSerializer):
author_name = serializers.SerializerMethodField()
comment_count = serializers.IntegerField(source="comments.count", read_only=True)
tags = serializers.SlugRelatedField(many=True, slug_field="name", queryset=Tag.objects.all())
class Meta:
model = Post
fields = ["id","title","body","author_name","comment_count","tags"]
def get_author_name(self, obj): return obj.author.get_full_name()
def validate_title(self, v):
if len(v) < 5: raise serializers.ValidationError("Too short")
return v