Coverage for shps/filters.py: 96%

24 statements  

« 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 

4 

5from vocabs.models import SkosConcept 

6from .models import TempSpatial, Source 

7 

8 

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 ) 

15 

16 class Meta: 

17 model = Source 

18 exclude = [ 

19 "upload", 

20 ] 

21 

22 

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 ) 

59 

60 class Meta: 

61 model = TempSpatial 

62 exclude = ["additional_data", "centroid", "temp_extent"] 

63 

64 def all_name_filter(self, queryset, name, value): 

65 return queryset.filter(Q(name__icontains=value) | Q(alt_name__icontains=value))