You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.4 KiB
45 lines
1.4 KiB
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__'
|
|
|