From ba1c3c4afa31eb517c697b0f004850b2a9e39bb5 Mon Sep 17 00:00:00 2001 From: juuso-j <68938778+juuso-j@users.noreply.github.com> Date: Tue, 25 Jun 2024 09:36:34 +0300 Subject: [PATCH] Filter municipalities --- exceptional_situations/api/views.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/exceptional_situations/api/views.py b/exceptional_situations/api/views.py index f14488ba1..6213a7906 100644 --- a/exceptional_situations/api/views.py +++ b/exceptional_situations/api/views.py @@ -1,4 +1,5 @@ import django_filters +from django.db.models import Q from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets @@ -23,6 +24,7 @@ class SituationFilter(django_filters.FilterSet): start_time__lt = django_filters.DateTimeFilter(method="filter_start_time__lt") end_time__gt = django_filters.DateTimeFilter(method="filter_end_time__gt") end_time__lt = django_filters.DateTimeFilter(method="filter_end_time__lt") + municipalities = django_filters.CharFilter(method="filter_municipalities") class Meta: model = Situation @@ -50,14 +52,21 @@ def filter_start_time__lt(self, queryset, fields, start_time): ids = [obj.id for obj in queryset if obj.start_time < start_time] return queryset.filter(id__in=ids) - def filter_end_time__gt(self, queryset, fields, start_time): - ids = [obj.id for obj in queryset if obj.start_time > start_time] + def filter_end_time__gt(self, queryset, fields, end_time): + ids = [obj.id for obj in queryset if obj.end_time > end_time] return queryset.filter(id__in=ids) - def filter_end_time__lt(self, queryset, fields, start_time): - ids = [obj.id for obj in queryset if obj.start_time < start_time] + def filter_end_time__lt(self, queryset, fields, end_time): + ids = [obj.id for obj in queryset if obj.end_time < end_time] return queryset.filter(id__in=ids) + def filter_municipalities(self, queryset, fields, municipalities): + municipalities = municipalities.split(",") + query = Q() + for municiaplity in municipalities: + query |= Q(announcements__municipalities__id__iexact=municiaplity.strip()) + return queryset.filter(query).distinct() + class SituationViewSet(viewsets.ReadOnlyModelViewSet): queryset = Situation.objects.all()