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.
 
 
 
 
 
 

129 lines
3.6 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
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