mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 00:13:18 +00:00
support display id
This commit is contained in:
parent
7f105e4a69
commit
0678dd4fca
29
contest/migrations/0002_auto_20170209_0845.py
Normal file
29
contest/migrations/0002_auto_20170209_0845.py
Normal file
@ -0,0 +1,29 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.12 on 2017-02-09 08:45
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contest', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='contestproblem',
|
||||
name='_id',
|
||||
field=models.CharField(db_index=True, default='1', max_length=24),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='contestproblem',
|
||||
name='sort_index',
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='contestproblem',
|
||||
unique_together=set([('_id', 'contest')]),
|
||||
),
|
||||
]
|
@ -62,14 +62,14 @@ class Contest(models.Model):
|
||||
|
||||
|
||||
class ContestProblem(AbstractProblem):
|
||||
_id = models.CharField(max_length=24, db_index=True)
|
||||
contest = models.ForeignKey(Contest)
|
||||
# 比如A B 或者1 2 或者 a b 将按照这个排序
|
||||
sort_index = models.CharField(max_length=30)
|
||||
# 是否已经公开了题目,防止重复公开
|
||||
is_public = models.BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
db_table = "contest_problem"
|
||||
unique_together = (("_id", "contest"), )
|
||||
|
||||
|
||||
class ContestRank(models.Model):
|
||||
|
21
problem/migrations/0002_problem__id.py
Normal file
21
problem/migrations/0002_problem__id.py
Normal file
@ -0,0 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.12 on 2017-02-09 08:45
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('problem', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='problem',
|
||||
name='_id',
|
||||
field=models.CharField(db_index=True, default='1', max_length=24, unique=True),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
@ -65,4 +65,4 @@ class AbstractProblem(models.Model):
|
||||
|
||||
|
||||
class Problem(AbstractProblem):
|
||||
pass
|
||||
_id = models.CharField(max_length=24, unique=True, db_index=True)
|
||||
|
@ -33,6 +33,7 @@ class Difficulty(object):
|
||||
|
||||
|
||||
class CreateOrEditProblemSerializer(serializers.Serializer):
|
||||
_id = serializers.CharField(max_length=32, allow_blank=True, allow_null=True)
|
||||
title = serializers.CharField(max_length=128)
|
||||
description = serializers.CharField()
|
||||
input_description = serializers.CharField()
|
||||
|
@ -111,6 +111,17 @@ class ProblemAPI(APIView):
|
||||
@validate_serializer(CreateProblemSerializer)
|
||||
def post(self, request):
|
||||
data = request.data
|
||||
|
||||
_id = data["_id"]
|
||||
if _id:
|
||||
try:
|
||||
Problem.objects.get(_id=_id)
|
||||
return self.error("Display ID already exists")
|
||||
except Problem.DoesNotExist:
|
||||
pass
|
||||
else:
|
||||
data["_id"] = rand_str(8)
|
||||
|
||||
if data["spj"]:
|
||||
if not data["spj_language"] or not data["spj_code"]:
|
||||
return self.error("Invalid spj")
|
||||
@ -127,6 +138,11 @@ class ProblemAPI(APIView):
|
||||
tags = data.pop("tags")
|
||||
|
||||
problem = Problem.objects.create(**data)
|
||||
|
||||
if not _id:
|
||||
problem._id = str(problem.id)
|
||||
problem.save()
|
||||
|
||||
for item in tags:
|
||||
try:
|
||||
tag = ProblemTag.objects.get(name=item)
|
||||
@ -154,12 +170,24 @@ class ProblemAPI(APIView):
|
||||
@validate_serializer(EditProblemSerializer)
|
||||
def put(self, request):
|
||||
data = request.data
|
||||
id = data.pop("id")
|
||||
try:
|
||||
problem = Problem.objects.get(id=data.pop("id"))
|
||||
problem = Problem.objects.get(id=id)
|
||||
if request.user.is_admin_role():
|
||||
problem = problem.get(created_by=request.user)
|
||||
except Problem.DoesNotExist:
|
||||
return self.error("Problem does not exist")
|
||||
|
||||
_id = data["_id"]
|
||||
if _id:
|
||||
try:
|
||||
Problem.objects.exclude(id=id).get(_id=_id)
|
||||
return self.error("Display ID already exists")
|
||||
except Problem.DoesNotExist:
|
||||
pass
|
||||
else:
|
||||
data["_id"] = str(id)
|
||||
|
||||
if data["spj"]:
|
||||
if not data["spj_language"] or not data["spj_code"]:
|
||||
return self.error("Invalid spj")
|
||||
|
Loading…
Reference in New Issue
Block a user