mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 08:23:20 +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:
|
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()
|
||||||
|
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user