]> git.parisson.com Git - telemeta.git/commitdiff
Base of advanced search with haystack
authorKaltar5679 <killian.mary@outlook.fr>
Fri, 24 Apr 2015 14:13:21 +0000 (16:13 +0200)
committerKaltar5679 <killian.mary@outlook.fr>
Fri, 24 Apr 2015 14:13:21 +0000 (16:13 +0200)
telemeta/forms/haystack_form.py
telemeta/haystack_urls.py
telemeta/templates/search/advanceSearch.html [new file with mode: 0644]
telemeta/views/haystack_search.py

index 7ffe0c8a6baefed94da4e1b9e6a14d27c22b5c58..b8700a6beee3753f26f53fc3b18c272901af0a23 100644 (file)
@@ -30,17 +30,63 @@ class HaySearchFormCollection(SearchForm):
         return sqs
 
 
-class HayAdvanceSearchForm(ModelSearchForm):
+class HayAdvanceFormItem(SearchForm):
 
-    title = forms.CharField(required=False)
+    cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
 
     def search(self):
-        sqs=SearchQuerySet().load_all()
+        sqs = super(HayAdvanceFormItem, self).search().models(MediaItem)
 
         if not self.is_valid():
             return sqs
 
         if self.cleaned_data['q']:
-            sqs=sqs.filter(content__contains=self.cleaned_data['q'])
+            sqs = sqs.filter(content__contains=self.cleaned_data['q'])
+
+        if self.cleaned_data['cote']:
+            sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote'])
 
         return sqs
+
+
+class HayAdvanceFormCollection(SearchForm):
+
+    cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
+
+    def search(self):
+        sqs = super(HayAdvanceFormCollection, self).search().models(MediaCollection)
+
+        if not self.is_valid():
+            return sqs
+
+        if self.cleaned_data['q']:
+            sqs = sqs.filter(content__contains=self.cleaned_data['q'])
+
+        if self.cleaned_data['cote']:
+            sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote'])
+
+        return sqs
+
+
+class HayAdvanceForm(SearchForm):
+    #to replace de basic search form field
+    q = forms.CharField(required=False, label=('Title'), widget=forms.TextInput(attrs={'type': 'search'}))
+    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
+
+        if self.cleaned_data['q']:
+            sqs = sqs.filter(content__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['location']:
+            sqs = sqs.filter(content__title__contains=self.cleaned_data['location'])
+
+        return sqs
\ No newline at end of file
index bcd83e44f8c5a2b0aca1eb3b0b404d181938d010..503b6a02a7dfc199671e7bb14619e21b59d87f67 100644 (file)
@@ -1,13 +1,13 @@
 # -*- coding: utf-8 -*-
-from django.conf.urls import patterns, url, include
+from django.conf.urls import patterns, url
 from telemeta.views.haystack_search import *
 from haystack.forms import *
-from telemeta.forms.haystack_form import HaySearchFormItem, HaySearchFormCollection, HayAdvanceSearchForm
-
 
 
 urlpatterns = patterns('',
-    url(r'^$', HaystackSearch(form_class=HaySearchFormItem), name='haystack_search'),
-    url(r'^advance/$', HaystackAdvanceSearch(form_class=HayAdvanceSearchForm), name='haystack_search_advance'),
+    url(r'^$', HaystackSearch(), name='haystack_search'),
     url(r'^quick/(?P<type>[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<type>[A-Za-z0-9._-]+)/$', HaystackAdvanceSearch(template='search/advanceSearch.html'), name='haystack_advance_search_type'),
+
 )
diff --git a/telemeta/templates/search/advanceSearch.html b/telemeta/templates/search/advanceSearch.html
new file mode 100644 (file)
index 0000000..5d1abd6
--- /dev/null
@@ -0,0 +1,48 @@
+{% extends 'telemeta/base.html' %}
+{% load telemeta_utils %}
+{% load i18n %}
+
+
+{% block title %}
+{% trans "Search" %}
+{% endblock %}
+
+{% block content %}
+    <form method="get" action=".">
+        <table>
+            {{ form.as_table }}
+            <tr>
+                <td>&nbsp;</td>
+                <td>
+                    <input type="submit" value="{% trans "Search" %}">
+                </td>
+            </tr>
+        </table>
+
+        {% if query %}
+            <h1>{% trans "Results" %}</h1>
+            {% ifequal type 'item' %}
+                 <p><b>Items ({{item_count}}) | <a href="{% url "haystack_advance_search_type" "collection" %}?q={{ query }}&cote={{ cote }}&location={{ location}}&amp;page=1">Collections ({{collection_count}})</a></b></p>
+             {% else %}
+                {% ifequal type 'collection'%}
+                    <p><b><a href="{% url "haystack_advance_search_type" "item" %}?q={{ query }}&cote={{ cote }}&location={{ location}}&amp;page=1">Items ({{item_count}}) </a>| Collections ({{collection_count}})</b></p>
+                {% endifequal %}
+             {% endifequal %}
+             {% with object_list as items %}
+                <div class="fullpage">
+                    {% include "search/mediaitem_listhaystack.html" %}
+                </div>
+
+                {% if page.has_previous or page.has_next %}
+                    <div>
+                        {% if page.has_previous %}<a href="?q={{ query }}&cote={{ cote }}&location={{ location}}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %}
+                        |
+                        {% if page.has_next %}<a href="?q={{ query }}&cote={{ cote }}&location={{ location}}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %}
+                    </div>
+                {% endif %}
+            {% endwith %}
+        {% else %}
+            {# Show some example queries to run, maybe query syntax, something else? #}
+        {% endif %}
+    </form>
+{% endblock %}
index 75892281f8449b9591f5468f5d8e78e41af42a2e..28022c4798c64a9cb3afff01d312d335f9b0b794 100644 (file)
@@ -3,7 +3,7 @@
 from haystack.views import SearchView
 from haystack.query import SearchQuerySet
 from telemeta.models import *
-from telemeta.forms.haystack_form import HaySearchFormItem, HaySearchFormCollection
+from telemeta.forms.haystack_form import *
 
 class HaystackSearch(SearchView):
 
@@ -33,5 +33,37 @@ class HaystackSearch(SearchView):
 
 class HaystackAdvanceSearch(SearchView):
 
-    def get_query(self):
-        return super(HaystackAdvanceSearch, self).get_query()
+    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_results(self):
+        if(self.type == 'collection'):
+            return self.form.search().models(MediaCollection)
+        else:
+            return self.form.search().models(MediaItem)
+
+    def extra_context(self):
+        extra = super(HaystackAdvanceSearch, self).extra_context()
+
+        if self.request.GET.get('q'):
+            extra['title'] = self.request.GET['q']
+
+        if self.request.GET.get('cote'):
+            extra['cote'] = self.request.GET['cote']
+
+        if self.request.GET.get('location'):
+            extra['location'] = self.request.GET['location']
+
+        extra['collection_count'] = self.form.search().models(MediaCollection).count()
+        extra['item_count'] = self.form.search().models(MediaItem).count()
+        if self.type == 'collection':
+            extra['type'] = 'collection'
+        else:
+            extra['type'] = 'item'
+        return extra