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): class Meta: model = ContestWork fields = '__all__'