]> git.parisson.com Git - telemeta.git/commitdiff
Add instruments in advance search
authorKaltar5679 <killian.mary@outlook.fr>
Thu, 30 Apr 2015 09:11:48 +0000 (11:11 +0200)
committerKaltar5679 <killian.mary@outlook.fr>
Thu, 30 Apr 2015 09:11:48 +0000 (11:11 +0200)
telemeta/forms/haystack_form.py
telemeta/models/item.py
telemeta/search_indexes.py
telemeta/views/haystack_search.py

index b332863e9cc6a9620113f83ace022fc410e89755..750d24e1f259c83fe2eaec72b81377d02c055a59 100644 (file)
@@ -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
index 11efb1a2c189a53ebfc628e52eac2cfabcc0d412..6869481cc908b07f8d8cf3518c7aec440b39b82b 100644 (file)
@@ -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
 
index e406e95aeb9b3e5e791f80c71190665f208fa969..9401163fa2435c42af0c1ed43048f7078a967d04 100644 (file)
@@ -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
index 374cb31498031d80f122fa7a6bee80812dd2b5cf..c4567863465fb78738988323d9d5a6fbc6823da8 100644 (file)
@@ -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