From 6e76a3fdce78cbd17f4294e809dc45277a1211c3 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 11 Apr 2022 10:51:15 +0200 Subject: [PATCH] #139 Parcel filter improved * improves frontend filtering for district, municipal, ..., so keys can be used for a lookup as well --- konova/filters/mixins.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/konova/filters/mixins.py b/konova/filters/mixins.py index bce7045..bad9f68 100644 --- a/konova/filters/mixins.py +++ b/konova/filters/mixins.py @@ -145,26 +145,22 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet): class Meta: abstract = True - def _filter_parcel_reference(self, queryset, name, value, filter_value) -> QuerySet: + def _filter_parcel_reference(self, queryset, filter_q) -> QuerySet: """ Filters the parcel entries by a given filter_value. filter_value may already include further filter annotations like 'xy__icontains' Args: - queryset (): - name (): - value (): - filter_value (): + queryset (QuerySet): The queryset + filter_q (Q): The Q-style filter expression Returns: """ - _filter = { - filter_value: value - } matching_parcels = Parcel.objects.filter( - **_filter + filter_q ) + related_geoms = matching_parcels.values( "geometries" ).distinct() @@ -185,8 +181,9 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet): """ matching_districts = District.objects.filter( - name__icontains=value - ) + Q(name__icontains=value) | + Q(key__icontains=value) + ).distinct() matching_parcels = Parcel.objects.filter( district__in=matching_districts ) @@ -209,7 +206,10 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet): Returns: """ - queryset = self._filter_parcel_reference(queryset, name, value, "parcel_group__name__icontains") + queryset = self._filter_parcel_reference( + queryset, + Q(parcel_group__name__icontains=value) | Q(parcel_group__key__icontains=value), + ) return queryset def filter_parcel(self, queryset, name, value) -> QuerySet: @@ -224,7 +224,10 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet): """ value = value.replace("-", "") - queryset = self._filter_parcel_reference(queryset, name, value, "flr") + queryset = self._filter_parcel_reference( + queryset, + Q(flr=value), + ) return queryset def filter_parcel_counter(self, queryset, name, value) -> QuerySet: @@ -239,7 +242,10 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet): """ value = value.replace("-", "") - queryset = self._filter_parcel_reference(queryset, name, value, "flrstck_zhlr") + queryset = self._filter_parcel_reference( + queryset, + Q(flrstck_zhlr=value) + ) return queryset def filter_parcel_number(self, queryset, name, value) -> QuerySet: @@ -254,7 +260,10 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet): """ value = value.replace("-", "") - queryset = self._filter_parcel_reference(queryset, name, value, "flrstck_nnr") + queryset = self._filter_parcel_reference( + queryset, + Q(flrstck_nnr=value), + ) return queryset