From de6ed31216997d08ad46e4a67b85d1f88cfa8aa3 Mon Sep 17 00:00:00 2001 From: "sxw@401" Date: Sun, 13 Sep 2015 19:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=AF=94=E8=B5=9Branklist?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F,=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E6=96=B9=E5=BC=8F,=E4=B8=BA=E4=BA=86?= =?UTF-8?q?=E4=BE=BF=E4=BA=8E=E7=BC=93=E5=AD=98,=E7=A8=8D=E5=BE=AE?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=98=BE=E7=A4=BA=E7=9A=84=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/views.py | 18 +++++++++++---- template/src/oj/contest/contest_rank.html | 27 ++++++++++++++++++----- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/contest/views.py b/contest/views.py index caf572db..3ea33e6f 100644 --- a/contest/views.py +++ b/contest/views.py @@ -356,7 +356,6 @@ def contest_list_page(request, page=1): if request.user.is_authenticated and join: contests = contests.filter(Q(contest_type__in=[1, 2]) | Q(groups__in=request.user.group_set.all())). \ filter(end_time__gt=datetime.datetime.now(), start_time__lt=datetime.datetime.now()) - paginator = Paginator(contests, 20) try: current_page = paginator.page(int(page)) @@ -407,10 +406,21 @@ def contest_rank_page(request, contest_id): # 这个人所有的提交 submissions = ContestSubmission.objects.filter(user_id=result[i]["user_id"], contest_id=contest_id) result[i]["submissions"] = {} - for item in submissions: - result[i]["submissions"][item.problem_id] = item + result[i]["problems"] = [] + for problem in contest_problems: + try: + status = submissions.get(problem=problem) + result[i]["problems"].append({ + "first_achieved":status.first_achivevd, + "ac": status.ac, + "failed_number": status.total_submission_number, + "ac_time": status.ac_time}) + if status.ac: + result[i]["problem"][-1].failed_number -= 1 + except ContestSubmission.DoesNotExist: + result[i]["problems"].append({}) result[i]["total_ac"] = submissions.filter(ac=True).count() - result[i]["user"] = User.objects.get(id=result[i]["user_id"]) + result[i]["username"] = User.objects.get(id=result[i]["user_id"]).username result[i]["total_time"] = submissions.filter(ac=True).aggregate(total_time=Sum("total_time"))["total_time"] result = sorted(result, cmp=_cmp, reverse=True) r.set("contest_rank_" + contest_id, json.dumps(list(result))) diff --git a/template/src/oj/contest/contest_rank.html b/template/src/oj/contest/contest_rank.html index 72ae0670..a23ff9c8 100644 --- a/template/src/oj/contest/contest_rank.html +++ b/template/src/oj/contest/contest_rank.html @@ -41,16 +41,33 @@ {% endfor %} - + {% for item in result %} {{ forloop.counter }} - {{ item.user.username }} + {{ item.username }} {{ item.total_ac }} / {{ item.total_submit }} {% if item.total_time %}{{ item.total_time }} min{% else %}--{% endif %} - {% for problem in contest_problems %} - - {% submission_problem problem item.submissions %} + {% for problem in item.problem %} + + {% if problem.ac %} + {{ problem.ac_time }}min + {% endif %} + {% if problem.failed_number %} + (-{{ problem.failed_number }}) + {% endif %} {% endfor %}