You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
6.4 KiB
212 lines
6.4 KiB
# -*- 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
|
|
|
|
|