From ffbab801320adc74fc856f944c244c004043cb43 Mon Sep 17 00:00:00 2001 From: virusdefender Date: Sat, 4 Feb 2017 00:10:44 +0800 Subject: [PATCH] add edit problem serializer --- problem/serializers.py | 18 +++++++++++++----- problem/views/admin.py | 6 +++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/problem/serializers.py b/problem/serializers.py index 05763af3..c84dbc4a 100644 --- a/problem/serializers.py +++ b/problem/serializers.py @@ -27,7 +27,7 @@ class Difficulty(object): HIGH = "High" -class CreateProblemSerializer(serializers.Serializer): +class CreateOrEditProblemSerializer(serializers.Serializer): title = serializers.CharField(max_length=128) description = serializers.CharField() input_description = serializers.CharField() @@ -35,18 +35,26 @@ class CreateProblemSerializer(serializers.Serializer): samples = serializers.ListField(child=CreateSampleSerializer()) test_case_id = serializers.CharField(max_length=32) test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer()) - hint = serializers.CharField(allow_blank=True) time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60) memory_limit = serializers.IntegerField(min_value=1, max_value=1024) languages = serializers.ListField(child=serializers.ChoiceField(choices=language_names)) rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI]) spj = serializers.BooleanField() - spj_language = serializers.ChoiceField(choices=spj_language_names, allow_blank=True) - spj_code = serializers.CharField(allow_blank=True) + spj_language = serializers.ChoiceField(choices=spj_language_names, allow_blank=True, allow_null=True) + spj_code = serializers.CharField(allow_blank=True, allow_null=True) visible = serializers.BooleanField() difficulty = serializers.ChoiceField(choices=[Difficulty.LOW, Difficulty.MID, Difficulty.HIGH]) 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): diff --git a/problem/views/admin.py b/problem/views/admin.py index c865f200..9e1bef00 100644 --- a/problem/views/admin.py +++ b/problem/views/admin.py @@ -11,7 +11,7 @@ from utils.shortcuts import rand_str from ..models import Problem, ProblemRuleType, ProblemTag from ..serializers import (CreateProblemSerializer, ProblemSerializer, - TestCaseUploadForm) + TestCaseUploadForm, EditProblemSerializer) class TestCaseUploadAPI(CSRFExemptAPIView): @@ -159,3 +159,7 @@ class ProblemAPI(APIView): if request.user.is_admin_role(): problems = problems.filter(created_by=request.user) return self.success(self.paginate_data(request, problems, ProblemSerializer)) + + @validate_serializer(EditProblemSerializer) + def put(self, request): + return self.success()