コード例 #1
0
ファイル: problem.py プロジェクト: mrseidel/wlmoj
    def get_normal_queryset(self):
        queryset = Problem.problems_list(self.request.user)

        if self.profile is not None and self.hide_solved:
            queryset = queryset.exclude(id__in=Submission.objects.filter(user=self.profile, points=F('problem__points'))
                                        .values_list('problem__id', flat=True))
        if self.show_types:
            queryset = queryset.prefetch_related('types')
        if self.category is not None:
            queryset = queryset.filter(group__id=self.category) 

        if self.request.user.has_perm('judge.see_private_problem'):
            filter = None
            see_restricted = self.request.user.has_perm('judge.see_restricted_problem')
            if self.problem_visibility == 1:
                filter = Q(is_public=True)
            elif self.problem_visibility == 2:
                filter = Q(is_public=False)
                if see_restricted:
                    filter &= Q(is_restricted=False)
            elif self.problem_visibility == 3 and see_restricted:
                filter = Q(is_restricted=True, is_public=False)
            elif see_restricted:
                filter = Q(is_restricted=False) | Q(is_public=True)

            if filter is not None:
                queryset = queryset.filter(filter)

        if self.selected_types:
            queryset = queryset.filter(types__in=self.selected_types)
        if 'search' in self.request.GET:
            self.search_query = query = ' '.join(self.request.GET.getlist('search')).strip()
            if query:
                if settings.ENABLE_FTS and self.full_text:
                    queryset = queryset.search(query, queryset.BOOLEAN).extra(order_by=['-relevance'])
                else:
                    queryset = queryset.filter(
                        Q(code__icontains=query) | Q(name__icontains=query) |
                        Q(translations__name__icontains=query, translations__language=self.request.LANGUAGE_CODE))
        self.prepoint_queryset = queryset
        if self.point_start is not None:
            queryset = queryset.filter(points__gte=self.point_start)
        if self.point_end is not None:
            queryset = queryset.filter(points__lte=self.point_end)
        return queryset.distinct()
コード例 #2
0
def api_v1_problem_list(request):
    user = get_request_user(request)

    if not user.is_authenticated:
        return JsonResponse({})

    queryset = Problem.problems_list(user)

    if settings.ENABLE_FTS and 'search' in request.GET:
        query = ' '.join(request.GET.getlist('search')).strip()
        if query:
            queryset = queryset.search(query)
    queryset = queryset.values_list('code', 'points', 'partial', 'name',
                                    'group__full_name')

    return JsonResponse({
        code: {
            'points': points,
            'partial': partial,
            'name': name,
            'group': group
        }
        for code, points, partial, name, group in queryset
    })
コード例 #3
0
 def items(self):
     return Problem.problems_list(AnonymousUser()).order_by('-date', '-id')[:25]
コード例 #4
0
ファイル: sitemap.py プロジェクト: mrseidel/wlmoj
 def items(self):
     return Problem.problems_list(AnonymousUser()).values_list('code')
コード例 #5
0
 def get_queryset(self):
     return Problem.problems_list(self.request.user).filter(Q(code__icontains=self.term) | Q(name__icontains=self.term))