From: afilsaime Date: Thu, 23 Apr 2015 08:27:04 +0000 (+0200) Subject: add MediaCollection index and Collections display in haystack search results X-Git-Tag: 1.6a^2~15^2~92 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=e58af19d4c3510306c098f15a51d8c5176ccaaae;p=telemeta.git add MediaCollection index and Collections display in haystack search results --- diff --git a/telemeta/forms/haystack_form.py b/telemeta/forms/haystack_form.py index cf1f5e59..8a590950 100644 --- a/telemeta/forms/haystack_form.py +++ b/telemeta/forms/haystack_form.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- from django import forms +from telemeta.models import * from haystack.inputs import AutoQuery, Exact, Clean -from haystack.forms import SearchForm +from haystack.forms import * from haystack.query import SearchQuerySet -class HaySearchForm(SearchForm): +class HaySearchFormItem(SearchForm): def search(self): sqs=SearchQuerySet().load_all() @@ -13,7 +14,20 @@ class HaySearchForm(SearchForm): return sqs if self.cleaned_data['q']: - sqs=sqs.filter(content__contains=self.cleaned_data['q']) + sqs=sqs.models(MediaItem).filter(content__contains=self.cleaned_data['q']) + + return sqs + +class HaySearchFormCollection(SearchForm): + + def search(self): + sqs=SearchQuerySet().load_all() + + if not self.is_valid(): + return sqs + + if self.cleaned_data['q']: + sqs=sqs.models(MediaCollection).filter(content__contains=self.cleaned_data['q']) return sqs diff --git a/telemeta/haystack_urls.py b/telemeta/haystack_urls.py index 684abda7..51374276 100644 --- a/telemeta/haystack_urls.py +++ b/telemeta/haystack_urls.py @@ -3,9 +3,12 @@ from django.conf.urls import patterns, url, include from telemeta.views.haystack_search import * from haystack.query import SearchQuerySet from haystack.views import SearchView -from telemeta.forms.haystack_form import HaySearchForm +from haystack.forms import * +from telemeta.forms.haystack_form import HaySearchFormItem, HaySearchFormCollection urlpatterns = patterns('', - url(r'^$', SearchView(form_class=HaySearchForm), name='haystack_search'), + url(r'^$', HaystackSearchItem(form_class=HaySearchFormItem), name='haystack_search_item'), + url(r'^item/$', HaystackSearchItem(form_class=HaySearchFormItem), name='haystack_search_item'), + url(r'^collection/$', HaystackSearchCollection(form_class=HaySearchFormCollection), name='haystack_search_collection'), ) diff --git a/telemeta/search_indexes.py b/telemeta/search_indexes.py index f73988bb..9738d552 100644 --- a/telemeta/search_indexes.py +++ b/telemeta/search_indexes.py @@ -11,3 +11,10 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): return MediaItem +class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): + + text = indexes.NgramField(document=True, use_template=True) + #rec_date = indexes.DateTimeField(use_template=True, null=True) + + def get_model(self): + return MediaCollection \ No newline at end of file diff --git a/telemeta/templates/search/mediaitem_listhaystack.html b/telemeta/templates/search/mediaitem_listhaystack.html index da50f0f6..8d516e3a 100644 --- a/telemeta/templates/search/mediaitem_listhaystack.html +++ b/telemeta/templates/search/mediaitem_listhaystack.html @@ -24,7 +24,7 @@ {{ result.object.title }} - {% if result.file %} + {% if result.object.file %}
{% endif %} diff --git a/telemeta/templates/search/search.html b/telemeta/templates/search/search.html index f3d1cc59..dbec1e69 100644 --- a/telemeta/templates/search/search.html +++ b/telemeta/templates/search/search.html @@ -22,17 +22,26 @@ {% if query %}

{% trans "Results" %}

-
- {% include "search/mediaitem_listhaystack.html" %} -
- - {% if page.has_previous or page.has_next %} -
- {% if page.has_previous %}{% endif %}« Previous{% if page.has_previous %}{% endif %} - | - {% if page.has_next %}{% endif %}Next »{% if page.has_next %}{% endif %} + {% ifequal type 'item' %} +

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

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

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

+ {% endifequal %} + {% endifequal %} + {% with object_list as items %} +
+ {% include "search/mediaitem_listhaystack.html" %}
- {% endif %} + + {% if page.has_previous or page.has_next %} +
+ {% if page.has_previous %}{% endif %}« Previous{% if page.has_previous %}{% endif %} + | + {% if page.has_next %}{% endif %}Next »{% if page.has_next %}{% endif %} +
+ {% endif %} + {% endwith %} {% else %} {# Show some example queries to run, maybe query syntax, something else? #} {% endif %} diff --git a/telemeta/views/haystack_search.py b/telemeta/views/haystack_search.py index ab0def17..cfa3c50f 100644 --- a/telemeta/views/haystack_search.py +++ b/telemeta/views/haystack_search.py @@ -2,13 +2,30 @@ from haystack.views import SearchView from haystack.query import SearchQuerySet +from telemeta.models import * +from telemeta.forms.haystack_form import HaySearchFormItem, HaySearchFormCollection -class HaystackSearch(SearchView): +class HaystackSearchItem(SearchView): def get_query(self): - query=super(HaystackSearch, self).get_query() - return query + return super(HaystackSearchItem, self).get_query() + def extra_context(self): + extra = super(HaystackSearchItem, self).extra_context() + extra['collection_count']=SearchQuerySet().load_all().models(MediaCollection).filter(content__contains=self.get_query()).count() + extra['item_count']=SearchQuerySet().load_all().models(MediaItem).filter(content__contains=self.get_query()).count() + extra['type']='item' + return extra +class HaystackSearchCollection(SearchView): + def get_query(self): + return super(HaystackSearchCollection, self).get_query() + + def extra_context(self): + extra = super(HaystackSearchCollection, self).extra_context() + extra['collection_count']=SearchQuerySet().load_all().models(MediaCollection).filter(content__contains=self.get_query()).count() + extra['item_count']=SearchQuerySet().load_all().models(MediaItem).filter(content__contains=self.get_query()).count() + extra['type']='collection' + return extra