contest and contest_problems api.

add ordering for contest and submission models
This commit is contained in:
zemal
2017-07-17 21:28:06 +08:00
parent ee2f5f5dd7
commit 53d0cae8ea
13 changed files with 160 additions and 25 deletions

View File

@@ -4,6 +4,7 @@ from judge.languages import language_names, spj_language_names
from utils.api import DateTimeTZField, UsernameSerializer, serializers
from .models import Problem, ProblemRuleType, ProblemTag
from .models import ContestProblem
class TestCaseUploadForm(forms.Form):
@@ -85,3 +86,17 @@ class ProblemSerializer(serializers.ModelSerializer):
class Meta:
model = Problem
class ContestProblemSerializer(serializers.ModelSerializer):
samples = serializers.JSONField()
test_case_score = serializers.JSONField()
languages = serializers.JSONField()
template = serializers.JSONField()
tags = serializers.SlugRelatedField(many=True, slug_field="name", read_only=True)
create_time = DateTimeTZField()
last_update_time = DateTimeTZField()
created_by = UsernameSerializer()
class Meta:
model = ContestProblem

View File

@@ -1,8 +1,9 @@
from django.conf.urls import url
from ..views.oj import ProblemTagAPI, ProblemAPI
from ..views.oj import ProblemTagAPI, ProblemAPI, ContestProblemAPI
urlpatterns = [
url(r"^problem/tags/?$", ProblemTagAPI.as_view(), name="problem_tag_list_api"),
url(r"^problems/?$", ProblemAPI.as_view(), name="problem_list_api"),
url(r"^contest_problems/?$", ContestProblemAPI.as_view(), name="contest_problem_api"),
]

View File

@@ -1,8 +1,9 @@
from django.db.models import Q
from utils.api import APIView
from ..models import ProblemTag, Problem
from account.decorators import login_required, check_contest_permission
from ..models import ProblemTag, Problem, ContestProblem
from ..serializers import ProblemSerializer, TagSerializer
from ..serializers import ContestProblemSerializer
class ProblemTagAPI(APIView):
@@ -42,3 +43,10 @@ class ProblemAPI(APIView):
problems = problems.filter(difficulty=difficulty_rank)
return self.success(self.paginate_data(request, problems, ProblemSerializer))
class ContestProblemAPI(APIView):
@check_contest_permission
def get(self, request):
contest_problems = ContestProblem.objects.filter(contest=self.contest, visible=True)
return self.success(ContestProblemSerializer(contest_problems, many=True).data)