mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 00:13:18 +00:00
add edit contest api
This commit is contained in:
parent
3150012eb1
commit
5ced3d9ca0
@ -25,3 +25,14 @@ class ContestSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
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()
|
||||
|
@ -3,7 +3,7 @@ import dateutil.parser
|
||||
from utils.api import APIView, validate_serializer
|
||||
|
||||
from ..models import Contest
|
||||
from ..serializers import ContestSerializer, CreateConetestSeriaizer
|
||||
from ..serializers import ContestSerializer, CreateConetestSeriaizer, EditConetestSeriaizer
|
||||
|
||||
|
||||
class ContestAPI(APIView):
|
||||
@ -20,6 +20,26 @@ class ContestAPI(APIView):
|
||||
Contest.objects.create(**data)
|
||||
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):
|
||||
contest_id = request.GET.get("id")
|
||||
if contest_id:
|
||||
|
Loading…
Reference in New Issue
Block a user