add edit problem serializer

This commit is contained in:
virusdefender 2017-02-04 00:10:44 +08:00
parent 920eeb639c
commit ffbab80132
2 changed files with 18 additions and 6 deletions

View File

@ -27,7 +27,7 @@ class Difficulty(object):
HIGH = "High" HIGH = "High"
class CreateProblemSerializer(serializers.Serializer): class CreateOrEditProblemSerializer(serializers.Serializer):
title = serializers.CharField(max_length=128) title = serializers.CharField(max_length=128)
description = serializers.CharField() description = serializers.CharField()
input_description = serializers.CharField() input_description = serializers.CharField()
@ -35,18 +35,26 @@ class CreateProblemSerializer(serializers.Serializer):
samples = serializers.ListField(child=CreateSampleSerializer()) samples = serializers.ListField(child=CreateSampleSerializer())
test_case_id = serializers.CharField(max_length=32) test_case_id = serializers.CharField(max_length=32)
test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer()) test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer())
hint = serializers.CharField(allow_blank=True)
time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60) time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60)
memory_limit = serializers.IntegerField(min_value=1, max_value=1024) memory_limit = serializers.IntegerField(min_value=1, max_value=1024)
languages = serializers.ListField(child=serializers.ChoiceField(choices=language_names)) languages = serializers.ListField(child=serializers.ChoiceField(choices=language_names))
rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI]) rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI])
spj = serializers.BooleanField() spj = serializers.BooleanField()
spj_language = serializers.ChoiceField(choices=spj_language_names, allow_blank=True) spj_language = serializers.ChoiceField(choices=spj_language_names, allow_blank=True, allow_null=True)
spj_code = serializers.CharField(allow_blank=True) spj_code = serializers.CharField(allow_blank=True, allow_null=True)
visible = serializers.BooleanField() visible = serializers.BooleanField()
difficulty = serializers.ChoiceField(choices=[Difficulty.LOW, Difficulty.MID, Difficulty.HIGH]) difficulty = serializers.ChoiceField(choices=[Difficulty.LOW, Difficulty.MID, Difficulty.HIGH])
tags = serializers.ListField(child=serializers.CharField(max_length=32)) tags = serializers.ListField(child=serializers.CharField(max_length=32))
source = serializers.CharField(max_length=256, allow_blank=True) hint = serializers.CharField(allow_blank=True, allow_null=True)
source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True)
class CreateProblemSerializer(CreateOrEditProblemSerializer):
pass
class EditProblemSerializer(CreateOrEditProblemSerializer):
id = serializers.IntegerField()
class TagSerializer(serializers.ModelSerializer): class TagSerializer(serializers.ModelSerializer):

View File

@ -11,7 +11,7 @@ from utils.shortcuts import rand_str
from ..models import Problem, ProblemRuleType, ProblemTag from ..models import Problem, ProblemRuleType, ProblemTag
from ..serializers import (CreateProblemSerializer, ProblemSerializer, from ..serializers import (CreateProblemSerializer, ProblemSerializer,
TestCaseUploadForm) TestCaseUploadForm, EditProblemSerializer)
class TestCaseUploadAPI(CSRFExemptAPIView): class TestCaseUploadAPI(CSRFExemptAPIView):
@ -159,3 +159,7 @@ class ProblemAPI(APIView):
if request.user.is_admin_role(): if request.user.is_admin_role():
problems = problems.filter(created_by=request.user) problems = problems.filter(created_by=request.user)
return self.success(self.paginate_data(request, problems, ProblemSerializer)) return self.success(self.paginate_data(request, problems, ProblemSerializer))
@validate_serializer(EditProblemSerializer)
def put(self, request):
return self.success()