from rest_framework import serializers from api.v1.serializers.content import ContentSerializer, ContentCreateSerializer, ImageObjectSerializer from api.v1.serializers.mixins import DispatchContentMixin from apps.content.models import (Contest, ContestWork) class ContestSerializer(serializers.ModelSerializer): cover = ImageObjectSerializer() content = ContentSerializer(many=True) class Meta: model = Contest fields = '__all__' class ContestCreateSerializer(DispatchContentMixin, serializers.ModelSerializer): content = serializers.ListSerializer( child=ContentCreateSerializer(), required=False, ) class Meta: model = Contest fields = '__all__' def create(self, validated_data): content = validated_data.pop('content', []) contest = super().create(validated_data) self.dispatch_content(contest, content) return contest def update(self, instance, validated_data): content = validated_data.pop('content', []) contest = super().update(instance, validated_data) self.dispatch_content(contest, content) return contest def to_representation(self, instance): return ContestSerializer(instance=instance, context=self.context).to_representation(instance) class ContestWorkSerializer(serializers.ModelSerializer): image = ImageObjectSerializer() likes = serializers.SerializerMethodField() user_liked = serializers.SerializerMethodField() class Meta: model = ContestWork fields = ['id', 'user', 'contest', 'image', 'child_full_name', 'age', 'created_at', 'likes', 'user_liked', 'img_width', 'img_height'] def get_likes(self, instance): return instance.likes.count() def get_user_liked(self, instance): user = self.context['request'].user return instance.likes.filter(user=user).exists() if user.is_authenticated else False class ContestWorkCreateSerializer(serializers.ModelSerializer): class Meta: model = ContestWork fields = '__all__' def to_representation(self, instance): return ContestWorkSerializer(instance=instance, context=self.context).to_representation(instance)