Add contest field to manage submission page

This commit is contained in:
cuom1999 2023-11-28 20:04:02 -06:00
parent 038aa8674a
commit e1054077fa
6 changed files with 96 additions and 70 deletions

View file

@ -467,7 +467,7 @@ class Contest(models.Model, PageVotable, Bookmarkable):
)
def __str__(self):
return self.name
return f"{self.name} ({self.key})"
def get_absolute_url(self):
return reverse("contest_view", args=(self.key,))

View file

@ -8,7 +8,7 @@ from judge.utils.celery import Progress
__all__ = ("apply_submission_filter", "rejudge_problem_filter", "rescore_problem")
def apply_submission_filter(queryset, id_range, languages, results, contest):
def apply_submission_filter(queryset, id_range, languages, results, contests):
if id_range:
start, end = id_range
queryset = queryset.filter(id__gte=start, id__lte=end)
@ -16,8 +16,8 @@ def apply_submission_filter(queryset, id_range, languages, results, contest):
queryset = queryset.filter(language_id__in=languages)
if results:
queryset = queryset.filter(result__in=results)
if contest:
queryset = queryset.filter(contest_object=contest)
if contests:
queryset = queryset.filter(contest_object__in=contests)
queryset = queryset.exclude(status__in=Submission.IN_PROGRESS_GRADING_STATUS)
return queryset

View file

@ -78,12 +78,12 @@ class ManageProblemSubmissionView(TitleMixin, ManageProblemSubmissionMixin, Deta
)
]
context["results"] = sorted(map(itemgetter(0), Submission.RESULT))
context["in_contest"] = False
context["current_contest"] = None
if (
self.request.in_contest_mode
and self.object in self.request.participation.contest.problems.all()
):
context["in_contest"] = True
context["current_contest"] = self.request.participation.contest
return context
@ -106,20 +106,12 @@ class BaseActionSubmissionsView(
try:
languages = list(map(int, self.request.POST.getlist("language")))
results = list(map(int, self.request.POST.getlist("result")))
contests = list(map(int, self.request.POST.getlist("contest")))
except ValueError:
return HttpResponseBadRequest()
contest = None
try:
in_contest = bool(self.request.POST.get("in_contest", False))
if in_contest:
contest = self.request.participation.contest
except (KeyError, ValueError):
return HttpResponseBadRequest()
return self.generate_response(
id_range, languages, self.request.POST.getlist("result"), contest
)
return self.generate_response(id_range, languages, results, contests)
def generate_response(self, id_range, languages, results, contest):
raise NotImplementedError()

View file

@ -85,10 +85,17 @@ class ProblemSelect2View(Select2View):
class ContestSelect2View(Select2View):
def get(self, request, *args, **kwargs):
self.problem_id = kwargs.get("problem_id", request.GET.get("problem_id", ""))
return super(ContestSelect2View, self).get(request, *args, **kwargs)
def get_queryset(self):
return Contest.get_visible_contests(self.request.user).filter(
q = Contest.get_visible_contests(self.request.user).filter(
Q(key__icontains=self.term) | Q(name__icontains=self.term)
)
if self.problem_id:
q = q.filter(problems=self.problem_id)
return q
class CommentSelect2View(Select2View):