add edit contest api

This commit is contained in:
virusdefender 2017-01-27 23:20:56 +08:00
parent 3150012eb1
commit 5ced3d9ca0
2 changed files with 32 additions and 1 deletions

View File

@ -25,3 +25,14 @@ class ContestSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Contest model = Contest
class EditConetestSeriaizer(serializers.Serializer):
id = serializers.IntegerField()
title = serializers.CharField(max_length=128)
description = serializers.CharField()
start_time = serializers.DateTimeField()
end_time = serializers.DateTimeField()
password = serializers.CharField(allow_blank=True, max_length=32)
visible = serializers.BooleanField()
real_time_rank = serializers.BooleanField()

View File

@ -3,7 +3,7 @@ import dateutil.parser
from utils.api import APIView, validate_serializer from utils.api import APIView, validate_serializer
from ..models import Contest from ..models import Contest
from ..serializers import ContestSerializer, CreateConetestSeriaizer from ..serializers import ContestSerializer, CreateConetestSeriaizer, EditConetestSeriaizer
class ContestAPI(APIView): class ContestAPI(APIView):
@ -20,6 +20,26 @@ class ContestAPI(APIView):
Contest.objects.create(**data) Contest.objects.create(**data)
return self.success() return self.success()
@validate_serializer(EditConetestSeriaizer)
def put(self, request):
data = request.data
try:
contest = Contest.objects.get(id=data.pop("id"))
if request.user.is_admin_role():
contest = contest.get(created_by=request.user)
except Contest.DoesNotExist:
return self.error("Contest does not exist")
data["start_time"] = dateutil.parser.parse(data["start_time"])
data["end_time"] = dateutil.parser.parse(data["end_time"])
if data["end_time"] <= data["start_time"]:
return self.error("Start time must occur earlier than end time")
if not data["password"]:
data["password"] = None
for k, v in data.items():
setattr(contest, k, v)
contest.save()
return self.success(ContestSerializer(contest).data)
def get(self, request): def get(self, request):
contest_id = request.GET.get("id") contest_id = request.GET.get("id")
if contest_id: if contest_id: