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.
 
 
 
 
 
 

214 lines
6.5 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.all()])
tg = forms.MultipleChoiceField(label=_(u'Теги'), required=False,
choices=[(tag.id, tag.name) for tag in Tag.objects.all()])
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
from theme.models import Theme
class ExpositionSearchForm(forms.Form):
q = forms.CharField(label=_(u'Поиск'), required=False)
w = forms.CharField(label=_(u'Где'), required=False)
th = forms.ModelMultipleChoiceField(label=_(u'Тематика'), queryset=Theme.objects.all(),
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.language()],
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