Coverage for shps/filters.py: 96%
24 statements
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-27 11:19 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-27 11:19 +0000
1import django_filters
2from django.db.models import Q
3from rest_framework_gis.filters import GeometryFilter
5from vocabs.models import SkosConcept
6from .models import TempSpatial, Source
9class SourceListFilter(django_filters.FilterSet):
10 name = django_filters.CharFilter(
11 lookup_expr="icontains",
12 help_text=Source._meta.get_field("name").help_text,
13 label=Source._meta.get_field("description").verbose_name,
14 )
16 class Meta:
17 model = Source
18 exclude = [
19 "upload",
20 ]
23class TempSpatialListFilter(django_filters.FilterSet):
24 all_name = django_filters.CharFilter(
25 method="all_name_filter",
26 label="Name",
27 help_text="Fuzzy search in Name and Alternative Name fields",
28 )
29 name = django_filters.CharFilter(
30 lookup_expr="icontains",
31 help_text="Fuzzy search (icontains)",
32 label=TempSpatial._meta.get_field("name").verbose_name,
33 )
34 alt_name = django_filters.CharFilter(
35 lookup_expr="icontains",
36 help_text="Fuzzy search (icontains)",
37 label=TempSpatial._meta.get_field("alt_name").verbose_name,
38 )
39 administrative_unit = django_filters.ModelMultipleChoiceFilter(
40 queryset=SkosConcept.objects.all(),
41 label=TempSpatial._meta.get_field("administrative_unit").verbose_name,
42 help_text=TempSpatial._meta.get_field("administrative_unit").help_text,
43 )
44 source = django_filters.ModelMultipleChoiceFilter(
45 queryset=Source.objects.all(),
46 label=TempSpatial._meta.get_field("source").verbose_name,
47 help_text=TempSpatial._meta.get_field("source").help_text,
48 )
49 start_date = django_filters.DateFromToRangeFilter(
50 label="Start Date", help_text="Start Date not before - not after."
51 )
52 end_date = django_filters.DateFromToRangeFilter(
53 label="End Date", help_text="End Date not before - not after."
54 )
55 geom = GeometryFilter(
56 field_name="geom",
57 lookup_expr="contains",
58 )
60 class Meta:
61 model = TempSpatial
62 exclude = ["additional_data", "centroid", "temp_extent"]
64 def all_name_filter(self, queryset, name, value):
65 return queryset.filter(Q(name__icontains=value) | Q(alt_name__icontains=value))