Skip to content

Commit 591f9f1

Browse files
committed
fix get submission list
1 parent 80f51c4 commit 591f9f1

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

submission/views/user.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import requests
44
import logging
55
from django.db import transaction
6+
from django.db.models import Q
67

78
from account.decorators import login_required, check_contest_permission
89
from account.models import User, UserProfile
@@ -236,30 +237,33 @@ def get(self, request):
236237
if not request.GET.get("contest_id"):
237238
return self.error("Contest_id is needed")
238239

240+
# first filter by contest
239241
contest_id = request.GET.get("contest_id")
240-
submissions = Submission.objects.filter(contest_id=contest_id).filter(
241-
user_id=request.user.id
242-
)
242+
submissions = Submission.objects.filter(contest_id=contest_id)
243243

244-
problem_id = request.GET.get("problem_id")
245-
result = request.GET.get("result")
246-
if problem_id:
247-
try:
248-
problem = Problem.objects.get(
249-
_id=problem_id, contest_id=contest_id, visible=True
250-
)
251-
except Problem.DoesNotExist:
252-
return self.error("Problem doesn't exist")
253-
submissions = submissions.filter(problem=problem)
244+
# filter by the request user id
245+
users = User.objects.filter(id=request.user.id)
246+
if len(users) == 0:
247+
self.error(f"no such user id: {request.user.id}")
248+
user = users[0]
254249

255-
if result:
256-
submissions = submissions.filter(result=result)
250+
if not (user.is_admin_role() and int(request.GET.get('myself')) == 0):
251+
submissions = submissions.filter(user_id=request.user.id)
252+
253+
if request.GET.get('username') != '':
254+
submissions = submissions.filter(username=request.GET.get('username'))
255+
256+
# filter by problem names
257+
problem_name = request.GET.get("problem_name")
258+
if problem_name != "":
259+
problems = Problem.objects.filter(Q(_id__icontains=problem_name))
260+
submissions = submissions.filter(Q(problem__in=problems))
257261

258-
# filter the test submissions submitted before contest start
259262
data = self.paginate_data(request, submissions)
260263
data["results"] = SubmissionListSerializer(
261264
data["results"], many=True, user=request.user
262265
).data
266+
263267
return self.success(data)
264268

265269

0 commit comments

Comments
 (0)