From 78ee212471aebf85aaa59f25529e48d4d2418532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz> Date: Mon, 11 Jan 2021 19:31:31 +0100 Subject: [PATCH] =?UTF-8?q?Spr=C3=A1vn=C3=A9=20po=C4=8D=C3=ADt=C3=A1n?= =?UTF-8?q?=C3=AD=20odevzdan=C3=BDch=20=C5=99e=C5=A1en=C3=AD=20u=20sout?= =?UTF-8?q?=C4=9B=C5=BEe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Započítáváme jen solution od Participations tohoto contestu. Také odstraněno již nepotřebné count. Fix #70 --- mo/web/org_contest.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index 2ded03e9..eee4493d 100644 --- a/mo/web/org_contest.py +++ b/mo/web/org_contest.py @@ -224,16 +224,18 @@ def org_contest(id: int, site_id: Optional[int] = None): sess = db.get_session() contest, site, rr = get_contest_site_rr(id, site_id, None) + tasks_subq = sess.query(db.Task.task_id).filter_by(round=contest.round) + pions_subq = sess.query(db.Participation.user_id).filter_by(contest=contest) + if site: + pions_subq = pions_subq.filter_by(place=site) sol_counts_q = ( sess.query(db.Solution.task_id, func.count(db.Solution.task_id)) - .filter(db.Solution.task_id.in_( - sess.query(db.Task.task_id).filter_by(round=contest.round) - )) + .filter( + db.Solution.task_id.in_(tasks_subq), + db.Solution.user_id.in_(pions_subq), + ) ) - if site: - sol_counts_q = sol_counts_q.filter(db.Solution.user_id.in_( - sess.query(db.Participation.user_id).filter_by(place=site) - )) + sol_counts = {} for task_id, count in sol_counts_q.group_by(db.Solution.task_id).all(): sol_counts[task_id] = count @@ -243,12 +245,8 @@ def org_contest(id: int, site_id: Optional[int] = None): for task in tasks: task.sol_count = sol_counts[task.task_id] if task.task_id in sol_counts else 0 - - count = None places_counts = None - if site_id: - count = sess.query(db.Participation).filter_by(place_id=site_id).count() - else: + if not site_id: places_counts = ( sess.query(db.Place, func.count('*')) .select_from(db.Participation).join(db.Place) @@ -261,7 +259,7 @@ def org_contest(id: int, site_id: Optional[int] = None): contest=contest, site=site, rights=sorted(rr.current_rights, key=lambda r: r. name), can_manage=rr.have_right(Right.manage_contest), - tasks=tasks, places_counts=places_counts, count=count, + tasks=tasks, places_counts=places_counts, ) -- GitLab