|
3 | 3 | import requests
|
4 | 4 | import logging
|
5 | 5 | from django.db import transaction
|
| 6 | +from django.db.models import Q |
6 | 7 |
|
7 | 8 | from account.decorators import login_required, check_contest_permission
|
8 | 9 | from account.models import User, UserProfile
|
@@ -236,30 +237,33 @@ def get(self, request):
|
236 | 237 | if not request.GET.get("contest_id"):
|
237 | 238 | return self.error("Contest_id is needed")
|
238 | 239 |
|
| 240 | + # first filter by contest |
239 | 241 | 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) |
243 | 243 |
|
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] |
254 | 249 |
|
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)) |
257 | 261 |
|
258 |
| - # filter the test submissions submitted before contest start |
259 | 262 | data = self.paginate_data(request, submissions)
|
260 | 263 | data["results"] = SubmissionListSerializer(
|
261 | 264 | data["results"], many=True, user=request.user
|
262 | 265 | ).data
|
| 266 | + |
263 | 267 | return self.success(data)
|
264 | 268 |
|
265 | 269 |
|
|
0 commit comments