From: Kaltar5679 Date: Tue, 28 Apr 2015 10:19:35 +0000 (+0200) Subject: Advance Search initialize with title, cote and location X-Git-Tag: 1.6a^2~15^2~82 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=424a55f8940f7affb89bc1ef1a486f2e8d3eef96;p=telemeta.git Advance Search initialize with title, cote and location --- diff --git a/telemeta/forms/haystack_form.py b/telemeta/forms/haystack_form.py index b8700a6b..f28688d1 100644 --- a/telemeta/forms/haystack_form.py +++ b/telemeta/forms/haystack_form.py @@ -74,19 +74,20 @@ class HayAdvanceForm(SearchForm): cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'})) location = forms.CharField(required=False, label=('Location'), widget=forms.TextInput(attrs={'type': 'search'})) + def search(self): sqs = SearchQuerySet().load_all() if not self.is_valid(): - return sqs + return self.no_query_found() - if self.cleaned_data['q']: - sqs = sqs.filter(content__title__contains=self.cleaned_data['q']) + if self.cleaned_data.get('q'): + sqs = sqs.filter(title__title__contains=self.cleaned_data['q']) - if self.cleaned_data['cote']: - sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote']) + if self.cleaned_data.get('cote'): + sqs = sqs.filter(cote__cote__contains=self.cleaned_data['cote']) - if self.cleaned_data['location']: - sqs = sqs.filter(content__title__contains=self.cleaned_data['location']) + if self.cleaned_data.get('location'): + sqs = sqs.filter(location__location__contains=self.cleaned_data['location']) return sqs \ No newline at end of file diff --git a/telemeta/haystack_urls.py b/telemeta/haystack_urls.py index 503b6a02..974ce2c8 100644 --- a/telemeta/haystack_urls.py +++ b/telemeta/haystack_urls.py @@ -7,7 +7,6 @@ from haystack.forms import * urlpatterns = patterns('', url(r'^$', HaystackSearch(), name='haystack_search'), url(r'^quick/(?P[A-Za-z0-9._-]+)/$', HaystackSearch(), name='haystack_search_type'), - url(r'^advance/$', HaystackAdvanceSearch(template='search/advanceSearch.html'), name='haystack_advance_search'), - url(r'^advance/(?P[A-Za-z0-9._-]+)/$', HaystackAdvanceSearch(template='search/advanceSearch.html'), name='haystack_advance_search_type'), - + url(r'^advance/$', HaystackAdvanceSearch(form_class=HayAdvanceForm, template='search/advanceSearch.html'), name='haystack_advance_search'), + url(r'^advance/(?P[A-Za-z0-9._-]+)/$', HaystackAdvanceSearch(form_class=HayAdvanceForm, template='search/advanceSearch.html'), name='haystack_advance_search_type'), ) diff --git a/telemeta/search_indexes.py b/telemeta/search_indexes.py index ae7e95bf..70b610f1 100644 --- a/telemeta/search_indexes.py +++ b/telemeta/search_indexes.py @@ -7,6 +7,9 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) item_acces = indexes.CharField(model_attr= 'collection__public_access' , faceted=True) item_status = indexes.CharField(model_attr= 'collection__document_status' , faceted=True) + title = indexes.NgramField(model_attr='title') + code = indexes.NgramField(model_attr='code') + location = indexes.NgramField(model_attr='location__name', default='') def get_model(self): return MediaItem @@ -16,6 +19,12 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.NgramField(document=True, use_template=True) #rec_date = indexes.DateTimeField(use_template=True, null=True) + title = indexes.NgramField(model_attr='title') + code = indexes.NgramField(model_attr='code') + location = indexes.NgramField(default='') def get_model(self): - return MediaCollection \ No newline at end of file + return MediaCollection + + def prepare_location(self, obj): + return "%s" % obj.countries() \ No newline at end of file diff --git a/telemeta/templates/search/advanceSearch.html b/telemeta/templates/search/advanceSearch.html index 5d1abd60..93fed061 100644 --- a/telemeta/templates/search/advanceSearch.html +++ b/telemeta/templates/search/advanceSearch.html @@ -22,10 +22,10 @@ {% if query %}

{% trans "Results" %}

{% ifequal type 'item' %} -

Items ({{item_count}}) | Collections ({{collection_count}})

+

Items ({{item_count}}) | Collections ({{collection_count}})

{% else %} {% ifequal type 'collection'%} -

Items ({{item_count}}) | Collections ({{collection_count}})

+

Items ({{item_count}}) | Collections ({{collection_count}})

{% endifequal %} {% endifequal %} {% with object_list as items %} @@ -35,9 +35,9 @@ {% if page.has_previous or page.has_next %}
- {% if page.has_previous %}{% endif %}« Previous{% if page.has_previous %}{% endif %} + {% if page.has_previous %}{% endif %}« Previous{% if page.has_previous %}{% endif %} | - {% if page.has_next %}{% endif %}Next »{% if page.has_next %}{% endif %} + {% if page.has_next %}{% endif %}Next »{% if page.has_next %}{% endif %}
{% endif %} {% endwith %} diff --git a/telemeta/templates/search/indexes/telemeta/mediacollection_text.txt b/telemeta/templates/search/indexes/telemeta/mediacollection_text.txt index 9cea4c46..e41993c2 100644 --- a/telemeta/templates/search/indexes/telemeta/mediacollection_text.txt +++ b/telemeta/templates/search/indexes/telemeta/mediacollection_text.txt @@ -13,4 +13,5 @@ {{ object.archiver_notes }} {{ object.items_done }} {{ object.conservation_site }} +{{ object.location }} {{ object.body }} diff --git a/telemeta/views/haystack_search.py b/telemeta/views/haystack_search.py index 28022c47..7dd303fb 100644 --- a/telemeta/views/haystack_search.py +++ b/telemeta/views/haystack_search.py @@ -35,13 +35,19 @@ class HaystackAdvanceSearch(SearchView): def __call__(self, request, type=None): self.type = type - """if(self.type == 'collection'): - self.form_class = HayAdvanceFormCollection - else: - self.form_class = HayAdvanceFormItem""" - self.form_class = HayAdvanceForm 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. + """ + if self.form.is_valid(): + return self.form.cleaned_data + + return '' + def get_results(self): if(self.type == 'collection'): return self.form.search().models(MediaCollection)