# -*- coding: utf-8 -*- from django import forms from django.utils.translation import ugettext_lazy as _ from haystack.query import EmptySearchQuerySet, SearchQuerySet from exposition.models import Exposition from conference.models import Conference from seminar.models import Seminar from webinar.models import Webinar from company.models import Company from theme.models import Theme, Tag from country.models import Country from city.models import City import ast class AbstactSearchForm(forms.Form): q = forms.CharField(label=_(u'Поиск'), required=False) w = forms.CharField(label=_(u'Где'), required=False) class CompanySearchForm(AbstactSearchForm): th = forms.MultipleChoiceField(label=_(u'Тематика'), required=False, choices=[(theme.id, theme.name) for theme in Theme.objects.filter()]) tg = forms.MultipleChoiceField(label=_(u'Теги'), required=False, choices=[(tag.id, tag.name) for tag in Tag.objects.filter()]) c = forms.CharField(label=_(u'Страна'), required=False, widget=forms.SelectMultiple()) city = forms.CharField(label=_(u'город'), required=False, widget=forms.SelectMultiple()) def clean_city(self): city = self.cleaned_data.get('city') if city: res = ast.literal_eval(city) return res return city def clean_c(self): country = self.cleaned_data.get('c') if country: res = ast.literal_eval(country) return res return country def search(self): q = self.cleaned_data.get('q') w = self.cleaned_data.get('w') th = self.cleaned_data.get('th') tg = self.cleaned_data.get('tg') c = self.cleaned_data.get('c') city = self.cleaned_data.get('city') sqs = SearchQuerySet().models(Company) if q: sqs = sqs.auto_query(q) if w: sqs = sqs.filter(where__contains=w) if th: sqs = sqs.filter(theme__in=th) if tg: sqs = sqs.filter(tag__in=tg) if c: sqs = sqs.filter(country__in=c) if city: sqs = sqs.filter(country__in=c) 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) 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, Conference, Seminar, Webinar) if q: sqs = sqs.auto_query(q) if w: sqs = sqs.filter(where__contains=w) return sqs