X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/55ec37324e9008cdb641ee55ed367a941f0fed07..21ae6d580b73b6a180a25b8514e5446d61bb888e:/src/documents/templatetags/book_list.py diff --git a/src/documents/templatetags/book_list.py b/src/documents/templatetags/book_list.py index bf5fbd09..88120d20 100644 --- a/src/documents/templatetags/book_list.py +++ b/src/documents/templatetags/book_list.py @@ -1,12 +1,12 @@ # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # -from re import split +import re from django.db.models import Q, Count, F, Max from django import template from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User -from documents.models import Chunk, Image, Project +from documents.models import Book, Chunk, Image, Project register = template.Library() @@ -70,10 +70,20 @@ def foreign_filter(qs, value, filter_field, model, model_field='slug', unset='-' def search_filter(qs, value, filter_fields): if not value: return qs - q = Q(**{"%s__icontains" % filter_fields[0]: value}) - for field in filter_fields[1:]: - q |= Q(**{"%s__icontains" % field: value}) - return qs.filter(q) + + for word in value.split(): + m = re.match(r'(.+):(.+)', word) + if m is not None: + field = m.group(1) + value = m.group(2) + q = Book.q_dc(field, field + 's', value, 'book__') + else: + q = Q(**{"%s__icontains" % filter_fields[0]: value}) + for field in filter_fields[1:]: + q |= Q(**{"%s__icontains" % field: value}) + qs = qs.filter(q) + + return qs _states = [