diff --git a/company/views.py b/company/views.py index 1d4a029a..0adeac4c 100644 --- a/company/views.py +++ b/company/views.py @@ -21,7 +21,6 @@ class CompanySearchView(ListView): if form.is_valid(): return form.search() else: - asdsa return EmptySearchQuerySet() else: return EmptySearchQuerySet() diff --git a/conference/search_indexes.py b/conference/search_indexes.py index 1a1efec0..64929dca 100644 --- a/conference/search_indexes.py +++ b/conference/search_indexes.py @@ -2,7 +2,7 @@ from haystack import indexes from models import Conference -class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): +class ConferenceIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) where = indexes.MultiValueField() def prepare_where(self, obj): diff --git a/exposition/search_indexes.py b/exposition/search_indexes.py index 6c85cc24..a864bd30 100644 --- a/exposition/search_indexes.py +++ b/exposition/search_indexes.py @@ -2,7 +2,7 @@ from haystack import indexes from models import Exposition -class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): +class ExpositionIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) where = indexes.MultiValueField() def prepare_where(self, obj): diff --git a/exposition/urls.py b/exposition/urls.py index 89aa6599..dfb3eb09 100644 --- a/exposition/urls.py +++ b/exposition/urls.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url from views import ExpositionView, ExpositionVisitors, ExpositionMembers, ExpositionStatistic, ExpositionPrice,\ - ExpositionProgramme + ExpositionProgramme, ExpositionSearchView urlpatterns = patterns('', + url(r'expositions/search/', ExpositionSearchView.as_view()), url(r'expositions/(?P.*)/(?P\d+)/$', ExpositionView.as_view()), url(r'expositions/(?P\d+)/$', ExpositionView.as_view()), # diff --git a/exposition/views.py b/exposition/views.py index d17fb238..a007bdf8 100644 --- a/exposition/views.py +++ b/exposition/views.py @@ -9,13 +9,52 @@ from models import Exposition from accounts.models import User from functions.custom_views import ExpoListView, ExpoMixin, EventDetail from django.views.generic import ListView, DetailView +from haystack.query import EmptySearchQuerySet +from functions.search_forms import ExpositionSearchForm # import json from django.utils.translation import ugettext as _ +class ExpositionSearchView(ListView): + paginate_by = 2 + template_name = 'exposition/search.html' + search_form = ExpositionSearchForm + model = Exposition + + def get_queryset(self): + + if self.request.GET: + form = self.search_form(self.request.GET) + if form.is_valid(): + return form.search() + else: + return EmptySearchQuerySet() + else: + return EmptySearchQuerySet() + + + def get_context_data(self, **kwargs): + context = super(ExpositionSearchView, self).get_context_data(**kwargs) + + context['search_form'] = ExpositionSearchForm(self.request.GET) + queries = self.request.GET.copy() + if queries.has_key('page'): + del queries['page'] + context['queries'] = queries + context['search_action'] = '/expositions/search/' + + return context + + class ExpositionView(ExpoListView): model = Exposition template_name = 'event_catalog.html' + search_form = ExpositionSearchForm + + def get_context_data(self, **kwargs): + context = super(ExpositionView, self).get_context_data(**kwargs) + context['search_action'] = '/expositions/search/' + return context class ExpositionVisitors(ExpositionView): model = Exposition diff --git a/functions/search_forms.py b/functions/search_forms.py index 15730b42..06f59eba 100644 --- a/functions/search_forms.py +++ b/functions/search_forms.py @@ -75,6 +75,34 @@ class CompanySearchForm(AbstactSearchForm): return sqs + +class ExpositionSearchForm(forms.Form): + q = forms.CharField(label=_(u'Поиск'), required=False) + w = forms.CharField(label=_(u'Где'), required=False) +# fr = forms.DateField(required=False) +# to = forms.DateField(required=False) + + def search(self): + + if not self.is_valid(): + return EmptySearchQuerySet() + q = self.cleaned_data.get('q') + w = self.cleaned_data.get('w') + + if not q and not w: + return EmptySearchQuerySet() + sqs = SearchQuerySet().models(Exposition) + + if q: + sqs = sqs.auto_query(q) + if w: + sqs = sqs.filter(where__contains=w) + + return sqs + + + + class EventSearchForm(forms.Form): q = forms.CharField(label=_(u'Поиск'), required=False) w = forms.CharField(label=_(u'Где'), required=False) diff --git a/place_exposition/search_indexes.py b/place_exposition/search_indexes.py index b64e19ad..b71900c8 100644 --- a/place_exposition/search_indexes.py +++ b/place_exposition/search_indexes.py @@ -5,9 +5,9 @@ from models import PlaceExposition class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) where = indexes.MultiValueField() - country = indexes.CharField(model_attr='country', null=True) - city = indexes.CharField(model_attr='city', null=True) - + #country = indexes.CharField(model_attr='country', null=True) + #city = indexes.CharField(model_attr='city', null=True) + """ def prepare_country(self, obj): if obj.country: return '%s'%obj.country.id @@ -17,6 +17,7 @@ class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): if obj.city: return '%s'%obj.country.city return '' + """ def prepare_where(self, obj): country = [tr.name for tr in obj.country.translations.all()] diff --git a/seminar/search_indexes.py b/seminar/search_indexes.py index 425bedaa..f0066444 100644 --- a/seminar/search_indexes.py +++ b/seminar/search_indexes.py @@ -2,7 +2,7 @@ from haystack import indexes from models import Seminar -class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): +class SeminarIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) where = indexes.MultiValueField() def prepare_where(self, obj): diff --git a/webinar/search_indexes.py b/webinar/search_indexes.py index 96b3c6fe..d0b0a36b 100644 --- a/webinar/search_indexes.py +++ b/webinar/search_indexes.py @@ -2,7 +2,7 @@ from haystack import indexes from models import Webinar -class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): +class WebinarIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) where = indexes.MultiValueField() def prepare_where(self, obj):