Coverage for vocabs/filters.py: 80%

35 statements  

« prev     ^ index     » next       coverage.py v7.6.0, created at 2024-07-27 11:19 +0000

1import django_filters 

2from dal import autocomplete 

3from .models import SkosConcept, SkosConceptScheme, get_all_children, SkosLabel 

4 

5 

6django_filters.filters.LOOKUP_TYPES = [ 

7 ("", "---------"), 

8 ("exact", "Is equal to"), 

9 ("iexact", "Is equal to (case insensitive)"), 

10 ("not_exact", "Is not equal to"), 

11 ("lt", "Lesser than/before"), 

12 ("gt", "Greater than/after"), 

13 ("gte", "Greater than or equal to"), 

14 ("lte", "Lesser than or equal to"), 

15 ("startswith", "Starts with"), 

16 ("endswith", "Ends with"), 

17 ("contains", "Contains"), 

18 ("icontains", "Contains (case insensitive)"), 

19 ("not_contains", "Does not contain"), 

20] 

21 

22 

23def generous_concept_filter(queryset, name, value): 

24 """call this function through "method=generous_concept_filter" """ 

25 if value: 

26 lookup = "__".join([name, "in"]) 

27 starter = value[0] 

28 all = get_all_children(starter, include_self=True) 

29 qs = queryset.filter(**{lookup: all}) 

30 return qs 

31 return queryset 

32 

33 

34class SkosConceptListFilter(django_filters.FilterSet): 

35 

36 pref_label = django_filters.ModelMultipleChoiceFilter( 

37 widget=autocomplete.Select2Multiple(url="vocabs-ac:skosconcept-autocomplete"), 

38 queryset=SkosConcept.objects.all(), 

39 lookup_expr="icontains", 

40 label="PrefLabel", 

41 help_text=False, 

42 ) 

43 

44 scheme = django_filters.ModelMultipleChoiceFilter( 

45 queryset=SkosConceptScheme.objects.all(), 

46 lookup_expr="icontains", 

47 label="in SkosConceptScheme", 

48 help_text=False, 

49 ) 

50 

51 class Meta: 

52 model = SkosConcept 

53 fields = "__all__" 

54 

55 

56class SkosConceptFilter(django_filters.FilterSet): 

57 

58 pref_label = django_filters.ModelMultipleChoiceFilter( 

59 widget=autocomplete.Select2Multiple(url="vocabs-ac:skosconcept-autocomplete"), 

60 queryset=SkosConcept.objects.all(), 

61 lookup_expr="icontains", 

62 label="PrefLabel", 

63 help_text=False, 

64 ) 

65 

66 scheme = django_filters.ModelMultipleChoiceFilter( 

67 queryset=SkosConceptScheme.objects.all(), 

68 lookup_expr="icontains", 

69 label="in SkosConceptScheme", 

70 help_text=False, 

71 ) 

72 

73 class Meta: 

74 model = SkosConcept 

75 fields = "__all__" 

76 

77 

78class SkosConceptSchemeListFilter(django_filters.FilterSet): 

79 

80 dc_title = django_filters.CharFilter( 

81 lookup_expr="icontains", 

82 help_text=SkosConceptScheme._meta.get_field("dc_title").help_text, 

83 label=SkosConceptScheme._meta.get_field("dc_title").verbose_name, 

84 ) 

85 dct_creator = django_filters.CharFilter( 

86 lookup_expr="icontains", 

87 help_text=SkosConceptScheme._meta.get_field("dct_creator").help_text, 

88 label=SkosConceptScheme._meta.get_field("dct_creator").verbose_name, 

89 ) 

90 

91 class Meta: 

92 model = SkosConceptScheme 

93 fields = "__all__" 

94 

95 

96class SkosLabelListFilter(django_filters.FilterSet): 

97 

98 label = django_filters.CharFilter( 

99 lookup_expr="icontains", 

100 help_text=SkosLabel._meta.get_field("label").help_text, 

101 label=SkosLabel._meta.get_field("label").verbose_name, 

102 ) 

103 

104 class Meta: 

105 model = SkosLabel 

106 fields = "__all__"