This commit is contained in:
2025-05-15 21:07:38 +08:00
parent 6ddb4cc29c
commit cec1eee4c6

View File

@@ -8,7 +8,7 @@ from django.template.loader import render_to_string
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.timezone import now from django.utils.timezone import now
from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
from django.db.models import Count from django.db.models import Count, Q
from django.utils import timezone from django.utils import timezone
import qrcode import qrcode
@@ -455,23 +455,22 @@ class UserActivityRankAPI(APIView):
start = request.GET.get("start") start = request.GET.get("start")
if not start: if not start:
return self.error("start time is required") return self.error("start time is required")
admin_usernames = ( hidden_names = User.objects.filter(
User.objects.filter(is_disabled=False) Q(admin_type=AdminType.SUPER_ADMIN)
.exclude(admin_type=AdminType.REGULAR_USER) | Q(admin_type=AdminType.ADMIN)
.values_list("username", flat=True) | Q(is_disabled=True)
) ).values_list("username", flat=True)
admin_len = len(admin_usernames)
submissions = Submission.objects.filter( submissions = Submission.objects.filter(
contest_id__isnull=True, create_time__gte=start, result=JudgeStatus.ACCEPTED contest_id__isnull=True, create_time__gte=start, result=JudgeStatus.ACCEPTED
) )
counts = ( counts = (
submissions.values("username") submissions.values("username")
.annotate(count=Count("problem_id", distinct=True)) .annotate(count=Count("problem_id", distinct=True))
.order_by("-count")[: 10 + admin_len] .order_by("-count")[: 10 + len(hidden_names)]
) )
data = [] data = []
for count in counts: for count in counts:
if count["username"] not in admin_usernames: if count["username"] not in hidden_names:
data.append(count) data.append(count)
return self.success(data[:10]) return self.success(data[:10])