def get_queryset(self):
try:
queryset = self.get_selected_from().select_related('problem', 'author').\
only('pk', 'contest_id', 'create_time', 'author_id', 'author__username', 'author__nickname',
'author__magic', 'problem_id', 'problem__title', 'lang', 'status', 'status_time', 'status_percent',
'code_length', 'ip', 'cheat_tag')
if not self.privileged and not self.contest_submission_visible and not is_admin_or_root(self.request.user):
queryset = queryset.filter(contest__isnull=True, problem__visible=True)
if 'user' in self.request.GET:
queryset = queryset.filter(author_id=self.request.GET['user'])
if self.allow_problem_query and 'problem' in self.request.GET:
queryset = queryset.filter(problem_id=self.reinterpret_problem_identifier(self.request.GET['problem']))
if 'lang' in self.request.GET:
queryset = queryset.filter(lang=self.request.GET['lang'])
if self.allow_verdict_query and 'verdict' in self.request.GET:
queryset = queryset.filter(status=int(self.request.GET['verdict'][1:]))
if self.distinct_by_author:
author_set = set()
res = []
for submission in queryset.all():
if submission.author_id not in author_set:
author_set.add(submission.author_id)
res.append(submission)
if self.query_number and len(res) >= self.query_number:
break
return res
else:
return queryset.all()[:self.query_number]
except Exception as e:
raise Http404(e)
评论列表
文章目录