diff --git a/contest_submission/views.py b/contest_submission/views.py index d749fcfb..f136245f 100644 --- a/contest_submission/views.py +++ b/contest_submission/views.py @@ -1,6 +1,5 @@ # coding=utf-8 import json - import redis from django.shortcuts import render from django.core.paginator import Paginator @@ -9,16 +8,15 @@ from rest_framework.views import APIView from judge.judger_controller.tasks import judge from judge.judger_controller.settings import redis_config + from account.decorators import login_required from account.models import SUPER_ADMIN from contest.decorators import check_user_contest_permission - from problem.models import Problem from contest.models import Contest, ContestProblem from utils.shortcuts import serializer_invalid_response, error_response, success_response, error_page, paginate - from submission.models import Submission from .serializers import CreateContestSubmissionSerializer from submission.serializers import SubmissionSerializer @@ -43,20 +41,16 @@ class ContestSubmissionAPIView(APIView): problem.save() except ContestProblem.DoesNotExist: return error_response(u"题目不存在") - submission = Submission.objects.create(user_id=request.user.id, language=int(data["language"]), contest_id=contest.id, code=data["code"], problem_id=problem.id) try: judge.delay(submission.id, problem.time_limit, problem.memory_limit, problem.test_case_id) except Exception: return error_response(u"提交判题任务失败") - # 增加redis 中判题队列长度的计数器 r = redis.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) r.incr("judge_queue_length") - return success_response({"submission_id": submission.id}) - else: return serializer_invalid_response(serializer) @@ -92,8 +86,26 @@ def contest_problem_submissions_list_page(request, contest_id, page=1): return error_page(request, u"比赛不存在") # 以下是本场比赛中所有的提交 submissions = Submission.objects.filter(contest_id=contest_id). \ - values("id", "result", "create_time", "accepted_answer_time", "language", "user_id").order_by("-create_time") + values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language", "user_id").order_by("-create_time") + language = request.GET.get("language", None) + filter = None + if language: + submissions = submissions.filter(language=int(language)) + filter = {"name": "language", "content": language} + result = request.GET.get("result", None) + if result: + submissions = submissions.filter(result=int(result)) + filter = {"name": "result", "content": result} paginator = Paginator(submissions, 20) + + # 为查询题目标题创建新字典 + title = {} + contest_problems = ContestProblem.objects.filter(contest=contest) + for item in contest_problems: + title[item.id] = item.title + for item in submissions: + item['title'] = title[item['problem_id']] + try: current_page = paginator.page(int(page)) except Exception: @@ -107,11 +119,10 @@ def contest_problem_submissions_list_page(request, contest_id, page=1): next_page = current_page.next_page_number() except Exception: pass - return render(request, "oj/contest/submissions_list.html", {"submissions": current_page, "page": int(page), "previous_page": previous_page, "next_page": next_page, "start_id": int(page) * 20 - 20, - "contest": contest}) + "contest": contest, "filter":filter}) class ContestSubmissionAdminAPIView(APIView): @@ -144,6 +155,4 @@ class ContestSubmissionAdminAPIView(APIView): return error_response(u"参数错误!") if problem_id: submissions = submissions.filter(problem_id=problem_id) - - return paginate(request, submissions, SubmissionSerializer) - + return paginate(request, submissions, SubmissionSerializer) \ No newline at end of file diff --git a/submission/views.py b/submission/views.py index 0925e131..6180f8e2 100644 --- a/submission/views.py +++ b/submission/views.py @@ -139,7 +139,7 @@ def my_submission_list_page(request, page=1): 我的所有提交的列表页 """ submissions = Submission.objects.filter(user_id=request.user.id, contest_id__isnull=True). \ - values("id", "result", "create_time", "accepted_answer_time", "language").order_by("-create_time") + values("id", "problem_id", "result", "create_time", "accepted_answer_time", "language").order_by("-create_time") language = request.GET.get("language", None) filter = None if language: diff --git a/template/src/oj/contest/my_submissions_list.html b/template/src/oj/contest/my_submissions_list.html index fb24befc..8c8aa5a7 100644 --- a/template/src/oj/contest/my_submissions_list.html +++ b/template/src/oj/contest/my_submissions_list.html @@ -18,17 +18,19 @@
{{ item.output }}@@ -45,23 +50,19 @@ {% if problem.hint %} {% endif %} -