From 85f9fbbb8141c38d5d4ce44297443932b9ff60fc Mon Sep 17 00:00:00 2001 From: zema1 Date: Thu, 29 Mar 2018 21:54:38 +0800 Subject: [PATCH] fix problem statistic count error --- .../migrations/0011_fix_problem_ac_count.py | 34 +++++++++++++++++++ ...umber.py => 0011_fix_submission_number.py} | 14 +------- 2 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 problem/migrations/0011_fix_problem_ac_count.py rename submission/migrations/{0010_fix_submission_number.py => 0011_fix_submission_number.py} (51%) diff --git a/problem/migrations/0011_fix_problem_ac_count.py b/problem/migrations/0011_fix_problem_ac_count.py new file mode 100644 index 0000000..119aca2 --- /dev/null +++ b/problem/migrations/0011_fix_problem_ac_count.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations +from django.db.models import Count + + +def fix_problem_count_bugs(apps, schema_editor): + Submission = apps.get_model("submission", "Submission") + Problem = apps.get_model("problem", "Problem") + + for item in Problem.objects.filter(contest__isnull=True): + submissions = Submission.objects.filter(problem=item) + item.submission_number = submissions.count() + results_count = submissions.values('result').annotate(count=Count('result')).order_by('result') + info = dict() + item.accepted_number = 0 + for stat in results_count: + result = stat["result"] + if result == 0: + item.accepted_number = stat["count"] + info[str(result)] = stat["count"] + item.statistic_info = info + item.save(update_fields=["submission_number", "accepted_number", "statistic_info"]) + + +class Migration(migrations.Migration): + dependencies = [ + ('problem', '0010_problem_spj_compile_ok'), + ] + + operations = [ + migrations.RunPython(fix_problem_count_bugs, reverse_code=migrations.RunPython.noop) + ] diff --git a/submission/migrations/0010_fix_submission_number.py b/submission/migrations/0011_fix_submission_number.py similarity index 51% rename from submission/migrations/0010_fix_submission_number.py rename to submission/migrations/0011_fix_submission_number.py index 1a75235..e6450a4 100644 --- a/submission/migrations/0010_fix_submission_number.py +++ b/submission/migrations/0011_fix_submission_number.py @@ -2,26 +2,14 @@ from __future__ import unicode_literals from django.db import migrations -from django.db.models import Count def fix_rejudge_bugs(apps, schema_editor): Submission = apps.get_model("submission", "Submission") - Problem = apps.get_model("problem", "Problem") User = apps.get_model("account", "User") - for item in Problem.objects.filter(contest__isnull=True): - submissions = Submission.objects.filter(problem=item) - item.submission_number = submissions.count() - results_count = submissions.annotate(count=Count('result')).values('result', 'count') - for stat in results_count: - if stat["result"] == 0: - item.accepted_number = stat["count"] - item.statistic_info[str(stat)] = stat["count"] - item.save(update_fields=["submission_number", "accepted_number", "statistic_info"]) - for user in User.objects.all(): - submissions = Submission.objects.filter(user_id=user.id) + submissions = Submission.objects.filter(user_id=user.id, contest__isnull=True) profile = user.userprofile profile.submission_number = submissions.count() profile.accepted_number = submissions.filter(result=0).count()