Skip to content

Commit

Permalink
Pridané filtre pre Event na buduce a podla rocnika
Browse files Browse the repository at this point in the history
  • Loading branch information
kovacspe committed Dec 14, 2024
1 parent 0846eaf commit 0e7f8a7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
10 changes: 10 additions & 0 deletions competition/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.db.models.manager import BaseManager
from django.utils.timezone import now
from django_filters import BooleanFilter


class UpcomingFilter(BooleanFilter):
def filter(self, qs: BaseManager, value: bool):
lookup_expr = 'gte' if value else 'lte'
lookup = '__'.join([self.field_name, lookup_expr])
return qs.filter(**{lookup: now()})
26 changes: 22 additions & 4 deletions competition/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@
from django.core.exceptions import ValidationError as CoreValidationError
from django.core.files import File
from django.core.mail import send_mail
from django.db.models.manager import BaseManager
from django.http import FileResponse, HttpResponse
from django.template.loader import render_to_string
from django.utils.timezone import now
from django_filters import Filter, FilterSet
from django_filters import Filter, FilterSet, ModelChoiceFilter
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import exceptions, filters, mixins, status, viewsets
from rest_framework.decorators import action
Expand All @@ -22,6 +23,7 @@
from rest_framework.response import Response

from base.utils import mime_type
from competition.filters import UpcomingFilter
from competition.models import (Comment, Competition, CompetitionType, Event,
EventRegistration, Grade, LateTag, Problem,
Publication, PublicationType, Semester, Series,
Expand Down Expand Up @@ -825,14 +827,30 @@ def post(self, request, format_post):

class EventViewSet(ModelViewSetWithSerializerContext):
"""Ročníky akcií (napríklad Matboj 2021)"""
class EventFilterSet(FilterSet):

class SuitableForGradeFilter(ModelChoiceFilter):
def filter(self, qs: BaseManager, value: Grade):
if value is None:
return qs
return qs.filter(
competition__min_years_until_graduation__lte=value.years_until_graduation
)

grade = SuitableForGradeFilter(queryset=Grade.objects.all())
future = UpcomingFilter(field_name='end')

class Meta:
model = Event
fields = ['school_year',
'season_code', 'location', 'competition']

queryset = Event.objects.all()
serializer_class = EventSerializer
filterset_fields = ['school_year', 'competition', ]
permission_classes = (CompetitionRestrictedPermission,)
filter_backends = [DjangoFilterBackend,
filters.SearchFilter, filters.OrderingFilter]
filterset_fields = ['school_year',
'season_code', 'location', 'competition']
filterset_class = EventFilterSet
search_fields = ['competition__name', 'year', 'additional_name']
ordering_fields = ['start', 'end', 'year']
ordering = ['start']
Expand Down

0 comments on commit 0e7f8a7

Please sign in to comment.