# -*- 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 from country.models import Area class ExpositionSearchForm(forms.Form): q = forms.CharField(label=_(u'Поиск'), required=False) w = forms.CharField(label=_(u'Где'), required=False) th = forms.CharField(label=_(u'Тематика'), required=False, widget=forms.SelectMultiple()) tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.SelectMultiple()) area = forms.MultipleChoiceField(label=_(u'Регион'), choices=[(item.id, item.name) for item in Area.objects.all()], required=False, widget=forms.CheckboxSelectMultiple()) co = forms.CharField(label=_(u'Страна'), required=False, widget=forms.SelectMultiple()) ci = forms.CharField(label=_(u'Город'), required=False, widget=forms.SelectMultiple()) fr = forms.DateField(required=False, widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateFrom', 'placeholder': _(u'дд.мм.гггг')})) to = forms.DateField(required=False, widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateTo', 'placeholder': _(u'дд.мм.гггг')})) """ def clean_area(self): area = self.cleaned_data.get('area') if area: res = ast.literal_eval(area) return res return area """ def clean_co(self): co = self.cleaned_data.get('co') if co: res = ast.literal_eval(co) return res return co def clean_ci(self): ci = self.cleaned_data.get('ci') if ci: res = ast.literal_eval(ci) return res return ci def clean_th(self): th = self.cleaned_data.get('th') if th: res = ast.literal_eval(th) return res return th def clean_tg(self): tg = self.cleaned_data.get('tg') if tg: res = ast.literal_eval(tg) return res return tg def search(self): if not self.is_valid(): return EmptySearchQuerySet() q = self.cleaned_data.get('q') w = self.cleaned_data.get('w') fr = self.cleaned_data.get('fr') to = self.cleaned_data.get('to') th = self.cleaned_data.get('th') tg = self.cleaned_data.get('tg') co = self.cleaned_data.get('co') ci = self.cleaned_data.get('ci') area = self.cleaned_data.get('area') sqs = SearchQuerySet().models(Exposition).all() if q: sqs = sqs.auto_query(q) if w: sqs = sqs.filter(where__contains=w) if fr: sqs = sqs.filter(data_begin__gte=fr) if to: sqs = sqs.filter(data_begin__lte=to) if area: sqs = sqs.filter(area_id__in=area) if co: sqs = sqs.filter(country_id__in=co) if ci: sqs = sqs.filter(city_id__in=ci) if th: sqs = sqs.filter(theme__in=th) if tg: sqs = sqs.filter(tag__in=tg) return sqs.order_by('data_begin') class EventSearchForm(forms.Form): q = forms.CharField(label=_(u'Поиск'), required=False) w = forms.CharField(label=_(u'Где'), required=False) fr = forms.DateField(required=False, widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateFrom', 'placeholder': _(u'дд.мм.гггг')})) to = forms.DateField(required=False, widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateTo', 'placeholder': _(u'дд.мм.гггг')})) 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