fix problem statistic count error
This commit is contained in:
34
problem/migrations/0011_fix_problem_ac_count.py
Normal file
34
problem/migrations/0011_fix_problem_ac_count.py
Normal file
@@ -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)
|
||||||
|
]
|
||||||
@@ -2,26 +2,14 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db.models import Count
|
|
||||||
|
|
||||||
|
|
||||||
def fix_rejudge_bugs(apps, schema_editor):
|
def fix_rejudge_bugs(apps, schema_editor):
|
||||||
Submission = apps.get_model("submission", "Submission")
|
Submission = apps.get_model("submission", "Submission")
|
||||||
Problem = apps.get_model("problem", "Problem")
|
|
||||||
User = apps.get_model("account", "User")
|
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():
|
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 = user.userprofile
|
||||||
profile.submission_number = submissions.count()
|
profile.submission_number = submissions.count()
|
||||||
profile.accepted_number = submissions.filter(result=0).count()
|
profile.accepted_number = submissions.filter(result=0).count()
|
||||||
Reference in New Issue
Block a user