gallery-backend/publications/serializers.py

36 lines
1.4 KiB
Python

from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from users.serializers import PublicUserSerializer
from .models import Publication, Rating, Category
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ('pk', 'name')
class PublicationSerializer(serializers.ModelSerializer):
category_detail = CategorySerializer(source="category", read_only=True)
user_detail = PublicUserSerializer(source="user", read_only=True)
average_score = serializers.IntegerField(read_only=True)
class Meta:
model = Publication
fields = ('pk', 'image', 'video', 'content_type', 'status', 'average_score', 'description', 'is_pinned', 'user', 'user_detail', 'category', 'category_detail','time_created', 'time_updated')
read_only_fields = ('time_created', 'time_updated', 'is_pinned', 'user', 'status')
class AdminPublicationSerializer(PublicationSerializer):
class Meta(PublicationSerializer.Meta):
read_only_fields = ('time_created', 'time_updated', 'user')
class RatePublicationSerializer(serializers.Serializer):
score = serializers.IntegerField()
publication = serializers.PrimaryKeyRelatedField(queryset=Publication.objects.only_publish())
def validate_score(self, value):
if value > 5 or value < 1:
raise ValidationError('Score must be between 1 and 5')
return value