more filters (type, subject)
[redakcja.git] / apps / catalogue / filters.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of MIL/PEER, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 import django_filters
7 from django.forms.widgets import SelectMultiple
8 from django.utils.functional import lazy
9 from django_filters.filters import ModelMultipleChoiceFilter
10
11 from catalogue.models import Document, Category
12
13
14 def tag_filter(dc_tag):
15     category = Category.objects.get(dc_tag=dc_tag)
16     return ModelMultipleChoiceFilter(
17         queryset=category.tag_set.all(),
18         label='',
19         widget=SelectMultiple(attrs={
20             'class': 'chosen-select',
21             'data-placeholder': lazy(lambda: category.label, unicode)(),
22         }),
23         method='filter_by_tag')
24
25
26 class DocumentFilterSet(django_filters.FilterSet):
27     language = tag_filter('language')
28     license = tag_filter('rights')
29     audience = tag_filter('audience')
30     resource_type = tag_filter('type')
31     subject = tag_filter('subject')
32
33     class Meta:
34         model = Document
35         fields = []
36
37     def filter_by_tag(self, queryset, name, value):
38         if not value:
39             return queryset
40         return queryset.filter(tags__in=value).distinct()