From 616aed6a5c445ac03c5556c778d54fd5f38b05b6 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 17 Aug 2015 20:56:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A2=98=E7=9B=AE=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=80=BB=E6=95=B0=E5=92=8C=E9=80=9A=E8=BF=87=E7=8E=87?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/db_router.py | 5 ++--- .../migrations/0002_submission_is_counted.py | 19 +++++++++++++++++++ submission/models.py | 1 + submission/views.py | 15 +++++++++++++++ template/oj/problem/problem_list.html | 2 +- 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 submission/migrations/0002_submission_is_counted.py diff --git a/oj/db_router.py b/oj/db_router.py index d8c1659b..3a20427c 100644 --- a/oj/db_router.py +++ b/oj/db_router.py @@ -17,7 +17,6 @@ class DBRouter(object): def allow_migrate(self, db, app_label, model=None, **hints): if app_label == "submission": - if db == "submission": - return db == app_label + return db == app_label else: - return db == "default" \ No newline at end of file + return db == "default" diff --git a/submission/migrations/0002_submission_is_counted.py b/submission/migrations/0002_submission_is_counted.py new file mode 100644 index 00000000..169a9a36 --- /dev/null +++ b/submission/migrations/0002_submission_is_counted.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('submission', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='submission', + name='is_counted', + field=models.BooleanField(default=False), + ), + ] diff --git a/submission/models.py b/submission/models.py index a2fcfde8..3442183d 100644 --- a/submission/models.py +++ b/submission/models.py @@ -18,6 +18,7 @@ class Submission(models.Model): accepted_answer_time = models.IntegerField(blank=True, null=True) # 这个字段只有在题目是accepted 的时候才会用到,比赛题目的提交可能还会有得分等信息,存储在这里面 accepted_answer_info = models.TextField(blank=True, null=True) + is_counted = models.BooleanField(default=False) class Meta: db_table = "submission" diff --git a/submission/views.py b/submission/views.py index 10c77867..f8c631bf 100644 --- a/submission/views.py +++ b/submission/views.py @@ -28,6 +28,9 @@ class SubmissionAPIView(APIView): data = serializer.data try: problem = Problem.objects.get(id=data["problem_id"]) + # 更新问题的总提交计数 + problem.total_submit_number += 1 + problem.save() except Problem.DoesNotExist: return error_response(u"题目不存在") submission = Submission.objects.create(user_id=request.user.id, language=int(data["language"]), @@ -51,6 +54,18 @@ class SubmissionAPIView(APIView): submission = Submission.objects.get(id=submission_id, user_id=request.user.id) except Submission.DoesNotExist: return error_response(u"提交不存在") + # 标记这个submission 已经被统计 + if not submission.is_counted: + submission.is_counted = True + submission.save() + if submission.result == result["accepted"]: + # 更新题目的 ac 计数器 + try: + problem = Problem.objects.get(id=submission.problem_id) + problem.total_accepted_number += 1 + problem.save() + except Problem.DoesNotExist: + pass response_data = {"result": submission.result} if submission.result == 0: response_data["accepted_answer_time"] = submission.accepted_answer_time diff --git a/template/oj/problem/problem_list.html b/template/oj/problem/problem_list.html index 53844de3..012f5d27 100644 --- a/template/oj/problem/problem_list.html +++ b/template/oj/problem/problem_list.html @@ -30,7 +30,7 @@ {{ item.id }} {{ item.title }} {{ item.difficulty }} - {{ item|accepted_radio }} + {{ item|accepted_radio }}% {% endfor %}