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
# -*- 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'),
+
)
--- /dev/null
+{% 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> </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}}&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}}&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}}&page={{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
+ |
+ {% if page.has_next %}<a href="?q={{ query }}&cote={{ cote }}&location={{ location}}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
+ </div>
+ {% endif %}
+ {% endwith %}
+ {% else %}
+ {# Show some example queries to run, maybe query syntax, something else? #}
+ {% endif %}
+ </form>
+{% endblock %}
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):
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