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 @@ # 提交时间 - 结果 - 运行时间 语言 + 运行时间 + 结果 {% for item in submissions %} - + {{ forloop.counter }} {{ item.create_time }} - {{ item.result|translate_result }} + + {{ item.language|translate_language }} + {% if item.accepted_answer_time %} {{ item.accepted_answer_time }}ms @@ -36,8 +38,8 @@ -- {% endif %} - - {{ item.language|translate_language }} + + {{ item.result|translate_result }} {% endfor %} diff --git a/template/src/oj/contest/submissions_list.html b/template/src/oj/contest/submissions_list.html index 336e9c32..c2653259 100644 --- a/template/src/oj/contest/submissions_list.html +++ b/template/src/oj/contest/submissions_list.html @@ -26,28 +26,61 @@ # - 用户 + 题目名称 + 用户 提交时间 - 结果 + + + 运行时间 - 语言 + + + {% for item in submissions %} - - + {% ifequal item.user_id request.user.id %} - + {{ forloop.counter |add:start_id }} {% else %} {{ forloop.counter |add:start_id }} {% endifequal %} - + + {{ item.title }} + {{ item.user_id|get_username }} - {{ item.create_time }} - {{ item.result|translate_result }} + + {{ item.language|translate_language }} + {% if item.accepted_answer_time %} {{ item.accepted_answer_time }}ms @@ -55,12 +88,11 @@ -- {% endif %} - - {{ item.language|translate_language }} + + {{ item.result|translate_result }} {% endfor %} - {% else %} @@ -70,15 +102,15 @@ -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/template/src/oj/problem/problem.html b/template/src/oj/problem/problem.html index b82fc01a..affc520a 100644 --- a/template/src/oj/problem/problem.html +++ b/template/src/oj/problem/problem.html @@ -4,8 +4,14 @@
{% include "oj/problem/_problem_header.html" %} @@ -33,7 +39,6 @@
-
 {{ item.output }}
@@ -45,23 +50,19 @@ {% if problem.hint %}
-

{{ problem.hint|safe }}

{% endif %}
-

{% for tag in problem.tags.all %} {{ tag.name }} {% endfor %}

-
-
-
@@ -85,9 +85,7 @@ 提交代码 -
-

diff --git a/template/src/oj/submission/my_submissions_list.html b/template/src/oj/submission/my_submissions_list.html index 1f91ce95..08cf17d2 100644 --- a/template/src/oj/submission/my_submissions_list.html +++ b/template/src/oj/submission/my_submissions_list.html @@ -8,6 +8,7 @@ # + 题目名称 提交时间
-{% endblock %} +{% endblock %} \ No newline at end of file