Files
Pulse-API/solution/pulse/api/posts/serializers.py
T
2024-03-04 23:21:51 +03:00

46 lines
1.3 KiB
Python

from django.conf import settings
from rest_framework import serializers
from api.posts.models import Post
class PostSerializer(serializers.ModelSerializer):
# ruff: noqa: N815
author = serializers.SerializerMethodField()
likesCount = serializers.SerializerMethodField()
dislikesCount = serializers.SerializerMethodField()
class Meta:
model = Post
fields = [
"id",
"content",
"author",
"tags",
"createdAt",
"likesCount",
"dislikesCount",
]
read_only_fields = ["id", "createdAt", "likesCount", "dislikesCount"]
# ruff: noqa: N802
def get_likesCount(self, obj):
return obj.likes.count()
def get_dislikesCount(self, obj):
return obj.dislikes.count()
def get_author(self, obj):
return obj.author.login
def validate_tags(self, value):
if not isinstance(value, list):
error = "Tags must be provided as a list."
raise serializers.ValidationError(error)
for tag in value:
if len(tag) > settings.MAX_TAG_LENGTH:
error = "Each tag must be 20 characters or fewer."
raise serializers.ValidationError(error)
return value