From 22b083068e48ea5411a5fb5618ee0275faff3c67 Mon Sep 17 00:00:00 2001 From: Kaltar5679 Date: Thu, 30 Apr 2015 11:11:48 +0200 Subject: [PATCH] Add instruments in advance search --- telemeta/forms/haystack_form.py | 7 +++++++ telemeta/models/item.py | 2 +- telemeta/search_indexes.py | 24 ++++++++++++++++++++++++ telemeta/views/haystack_search.py | 6 +----- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/telemeta/forms/haystack_form.py b/telemeta/forms/haystack_form.py index b332863e..750d24e1 100644 --- a/telemeta/forms/haystack_form.py +++ b/telemeta/forms/haystack_form.py @@ -36,6 +36,10 @@ class HayAdvanceForm(SearchForm): code = forms.CharField(required=False, label=('Code'), widget=forms.TextInput(attrs={'type': 'search'})) location = forms.CharField(required=False, label=('Location'), widget=forms.TextInput(attrs={'type': 'search'})) ethnic_group = forms.CharField(required=False, label=('Population / social group'), widget=forms.TextInput(attrs={'type': 'search'})) + #waiting for docker update (django-haystack github version) + #list_ethnic = SearchQuerySet().load_all().models(MediaCollection).ethnic_groups().distinct + #ethnic_group = forms.ChoiceField(required=False, label=('Population / social group'), widget=forms.Select, choices = list_ethnic)) + instruments = forms.CharField(required=False, label=('Instruments'), widget=forms.TextInput(attrs={'type': 'search'})) def search(self): sqs = SearchQuerySet().load_all() @@ -55,4 +59,7 @@ class HayAdvanceForm(SearchForm): if self.cleaned_data.get('ethnic_group'): sqs = sqs.filter(ethnic_group__ethnic_group__contains=self.cleaned_data['ethnic_group']) + if self.cleaned_data.get('instruments'): + sqs = sqs.filter(instruments__instruments__contains=self.cleaned_data['instruments']) + return sqs diff --git a/telemeta/models/item.py b/telemeta/models/item.py index 11efb1a2..6869481c 100644 --- a/telemeta/models/item.py +++ b/telemeta/models/item.py @@ -220,7 +220,7 @@ class MediaItem(MediaResource): instruments.append(instrument) if not alias in instruments: instruments.append(alias) - + #no reference for __name_cmp anywhere instruments.sort(self.__name_cmp) return instruments diff --git a/telemeta/search_indexes.py b/telemeta/search_indexes.py index e406e95a..9401163f 100644 --- a/telemeta/search_indexes.py +++ b/telemeta/search_indexes.py @@ -14,6 +14,7 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): code = indexes.NgramField(model_attr='code') location = indexes.NgramField(model_attr='location__name', default='') ethnic_group = indexes.NgramField(model_attr='ethnic_group', default='') + instruments = indexes.NgramField(default='') def prepare_digitized(self, obj): if obj.file.name: @@ -26,6 +27,14 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): def get_model(self): return MediaItem + def prepare_instruments(self, obj): + item = MediaItemPerformance.objects.all().filter(media_item__title__contains=obj.title) + instruments = [] + for material in item: + instruments.append(material.instrument) + instruments.append(material.alias) + return "%s" % instruments + class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): @@ -40,6 +49,7 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): code = indexes.NgramField(model_attr='code') location = indexes.NgramField(default='') ethnic_group = indexes.NgramField(default='') + instruments = indexes.NgramField(default='') def prepare_digitized(self, obj): return obj.has_mediafile @@ -52,3 +62,17 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): def prepare_ethnic_group(self, obj): return "%s" % obj.ethnic_groups() + + def prepare_instruments(self, obj): + instruments = [] + items = obj.items.all() + for item in items: + materials = MediaItemPerformance.objects.all().filter(media_item__title__exact=item.title) + for material in materials: + if material.instrument and not material.instrument in instruments: + instruments.append(material.instrument) + + if material.alias and not material.alias in instruments: + instruments.append(material.alias) + + return "%s" % instruments diff --git a/telemeta/views/haystack_search.py b/telemeta/views/haystack_search.py index 374cb314..c4567863 100644 --- a/telemeta/views/haystack_search.py +++ b/telemeta/views/haystack_search.py @@ -50,11 +50,7 @@ class HaystackAdvanceSearch(SearchView): return super(HaystackAdvanceSearch, self).__call__(request) def get_query(self): - """ - Returns the query provided by the user. - - Returns an empty string if the query is invalid. - """ + #overwrite the get_query for begin search with any form if self.form.is_valid(): return self.form.cleaned_data -- 2.39.5