working (and ugly) filtering for resources
[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.utils.functional import lazy
8 from django_filters.filters import ModelMultipleChoiceFilter
9
10 from catalogue.models import Document, Category
11
12
13 def tag_filter(dc_tag):
14     category = Category.objects.get(dc_tag=dc_tag)
15     return ModelMultipleChoiceFilter(
16         queryset=category.tag_set.all(), label=lazy(lambda: category.label, unicode)(), method='filter_by_tag')
17
18
19 class DocumentFilterSet(django_filters.FilterSet):
20     language = tag_filter('language')
21     license = tag_filter('rights')
22     audience = tag_filter('audience')
23
24     class Meta:
25         model = Document
26         fields = []
27
28     def filter_by_tag(self, queryset, name, value):
29         if not value:
30             return queryset
31         return queryset.filter(tags__in=value).distinct()