From 8393eba2e1d6eb58ecf889e60c82cfafdd304e6a Mon Sep 17 00:00:00 2001 From: Osama Ragab Date: Sun, 5 Jun 2022 23:09:25 +0200 Subject: [PATCH] feat: update case'name filter --- api/cases/apis.py | 1 + api/cases/filters.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/api/cases/apis.py b/api/cases/apis.py index 499d4c7..42003fd 100644 --- a/api/cases/apis.py +++ b/api/cases/apis.py @@ -73,6 +73,7 @@ class FilterSerializer(serializers.Serializer): end_date = serializers.DateField(required=False) gov = serializers.IntegerField(required=False) name = serializers.CharField(required=False) + include_null = serializers.BooleanField(required=False) class OutputSerializer(serializers.Serializer): id = serializers.IntegerField() diff --git a/api/cases/filters.py b/api/cases/filters.py index af1c4f6..5b62243 100644 --- a/api/cases/filters.py +++ b/api/cases/filters.py @@ -1,4 +1,5 @@ import django_filters +from django.db.models.query import Q from .models import Case @@ -8,9 +9,7 @@ class CaseFilter(django_filters.FilterSet): type = django_filters.CharFilter(lookup_expr="iexact") gov = django_filters.NumberFilter(field_name="location__gov") - name = django_filters.CharFilter( - field_name="details__name", lookup_expr="icontains" - ) + name = django_filters.CharFilter(field_name="details__name", method="filter_name") start_age = django_filters.NumberFilter( field_name="details__age", lookup_expr="gte" @@ -24,6 +23,14 @@ class CaseFilter(django_filters.FilterSet): field_name="details__last_seen", lookup_expr="lte" ) + def filter_name(self, queryset, name, value): + if self.data.get("include_null"): + return queryset.filter( + Q(details__name__icontains=value) | Q(details__name__isnull=True) + ) + + return queryset.filter(details__name__icontains=value) + class Meta: model = Case fields = [