Removing extra querysets

remotes/origin/1203
Nazar Kotjuk 10 years ago
parent 6ff5c1b318
commit a380da7d84
  1. 2
      accounts/forms.py
  2. 5
      company/urls.py
  3. 39
      company/views.py
  4. 65
      core/views.py
  5. 29
      exposition/views.py
  6. 115
      functions/search_forms.py
  7. 2
      proj/views.py
  8. 2
      static/custom_js/main.js
  9. 2
      templates/client/includes/exposition/default_description.html

@ -319,7 +319,7 @@ class UserFilterForm(forms.Form):
class FeedFilterForm(forms.Form): class FeedFilterForm(forms.Form):
data_with_parents = None data_with_parents = None
filter = None filter = None
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.all()], th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.expo_themes()],
required=False, widget=forms.CheckboxSelectMultiple()) required=False, widget=forms.CheckboxSelectMultiple())
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple()) tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple())
area = forms.MultipleChoiceField(label=_(u'Регион'), area = forms.MultipleChoiceField(label=_(u'Регион'),

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from views import CompanySearchView, MemberDetail, MemberList, MemberTagList, MemberThemeList from views import MemberDetail, MemberList, MemberTagList, MemberThemeList
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from edit_views import * from edit_views import *
@ -8,8 +8,7 @@ from edit_views import *
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'company/create-company/$', 'company.views.create_company'), url(r'company/create-company/$', 'company.views.create_company'),
url(r'company/get-company/$', 'company.views.get_company'), url(r'company/get-company/$', 'company.views.get_company'),
#
url(r'members/search/$', CompanySearchView.as_view()),
#url(r'members/(?P<params>.*)/(?P<page>\d+)/$', CompanyView.as_view()), #url(r'members/(?P<params>.*)/(?P<page>\d+)/$', CompanyView.as_view()),
#url(r'members/(?P<page>\d+)/$', CompanyView.as_view()), #url(r'members/(?P<page>\d+)/$', CompanyView.as_view()),
#url(r'members/(?P<params>.*)/$', CompanyView.as_view()), #url(r'members/(?P<params>.*)/$', CompanyView.as_view()),

@ -6,12 +6,9 @@ from django.views.generic import DetailView
from functions.custom_views import ListView from functions.custom_views import ListView
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext as _, get_language from django.utils.translation import ugettext as _, get_language
from haystack.query import EmptySearchQuerySet
from models import Company from models import Company
from theme.models import Theme, Tag from theme.models import Theme, Tag
from forms import CreateCompanyForm from forms import CreateCompanyForm
from functions.custom_views import ExpoListView
from functions.search_forms import CompanySearchForm
from .edit_forms import NameForm as CompNameForm, HomeForm as CompHomeForm, PhoneForm as CompPhoneForm,\ from .edit_forms import NameForm as CompNameForm, HomeForm as CompHomeForm, PhoneForm as CompPhoneForm,\
EmailForm as CompEmailForm, WebPageForm as CompWebPageForm, SocialForm as CompSocialForm,\ EmailForm as CompEmailForm, WebPageForm as CompWebPageForm, SocialForm as CompSocialForm,\
TagForm as CompTagForm, DescriptionForm as CompDescr, StaffForm as CompStaff, \ TagForm as CompTagForm, DescriptionForm as CompDescr, StaffForm as CompStaff, \
@ -20,44 +17,10 @@ from .edit_forms import NameForm as CompNameForm, HomeForm as CompHomeForm, Phon
from meta.views import MetadataMixin from meta.views import MetadataMixin
class CompanySearchView(ListView):
paginate_by = 10
template_name = 'client/company/search.html'
search_form = CompanySearchForm
model = Company
def get_queryset(self):
if self.request.GET:
form = self.search_form(self.request.GET)
if form.is_valid():
return form.search()
else:
return EmptySearchQuerySet()
else:
return EmptySearchQuerySet()
def get_context_data(self, **kwargs):
context = super(CompanySearchView, self).get_context_data(**kwargs)
context['search_form'] = CompanySearchForm(self.request.GET)
queries = self.request.GET.copy()
if queries.has_key('page'):
del queries['page']
context['queries'] = queries
context['search_action'] = '/members/search/'
context['type'] = 'members search'
return context
class MemberList(MetadataMixin, ListView): class MemberList(MetadataMixin, ListView):
model = Company model = Company
paginate_by = settings.CLIENT_PAGINATION paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html' template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/' catalog_url = '/members/'
def get_queryset(self): def get_queryset(self):
@ -67,7 +30,6 @@ class MemberThemeList(MetadataMixin, ListView):
model = Company model = Company
paginate_by = settings.CLIENT_PAGINATION paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html' template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/' catalog_url = '/members/'
def get_queryset(self): def get_queryset(self):
@ -83,7 +45,6 @@ class MemberTagList(MetadataMixin, ListView):
model = Company model = Company
paginate_by = settings.CLIENT_PAGINATION paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html' template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/' catalog_url = '/members/'
def get_queryset(self): def get_queryset(self):

@ -10,77 +10,12 @@ from functions.views_help import split_params
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
#from forms import PlaceSearchForm
from functions.search_forms import PlaceSearchForm
from functions.search_forms import EventSearchForm
from haystack.query import EmptySearchQuerySet
class EventSearchView(ListView):
paginate_by = 10
template_name = 'exposition/search.html'
search_form = EventSearchForm
def get_queryset(self):
if self.request.GET:
form = self.search_form(self.request.GET)
if form.is_valid():
return form.search()
else:
return EmptySearchQuerySet()
else:
return EmptySearchQuerySet()
def get_context_data(self, **kwargs):
context = super(EventSearchView, self).get_context_data(**kwargs)
context['search_form'] = EventSearchForm(self.request.GET)
queries = self.request.GET.copy()
if queries.has_key('page'):
del queries['page']
context['queries'] = queries
context['search_action'] = '/events/search/'
return context
class PlaceSearchView(ListView):
paginate_by = 10
template_name = 'place/search.html'
model = PlaceExposition
search_form = PlaceSearchForm
def get_queryset(self):
if self.request.GET:
form = self.search_form(self.request.GET)
if form.is_valid():
return form.search()
else:
return []
else:
return []
def get_context_data(self, **kwargs):
context = super(PlaceSearchView, self).get_context_data(**kwargs)
context['search_form'] = PlaceSearchForm(self.request.GET)
queries = self.request.GET.copy()
if queries.has_key('page'):
del queries['page']
context['queries'] = queries
context['search_action'] = '/places/search/'
context['type'] = 'places search'
return context
class PlaceListView(ListView): class PlaceListView(ListView):
paginate_by = 10 paginate_by = 10
params = None params = None
single_page = False single_page = False
template_name = 'place_catalog_test.html' template_name = 'place_catalog_test.html'
model = 'places' model = 'places'
search_form = PlaceSearchForm
order = 'data_begin' order = 'data_begin'
def get_params(self): def get_params(self):

@ -42,7 +42,7 @@ class ExpositionBy(JitterCacheMixin, MetadataMixin, ListView):
class ExpositionByCountry(ExpositionBy): class ExpositionByCountry(ExpositionBy):
cache_range = settings.CACHE_RANGE cache_range = [60*30, 60*60]
model = Country model = Country
title1 = _(u'По странам') title1 = _(u'По странам')
title2 = _(u'Выставки мира по странам') title2 = _(u'Выставки мира по странам')
@ -57,7 +57,7 @@ class ExpositionByCountry(ExpositionBy):
class ExpositionByTheme(ExpositionBy): class ExpositionByTheme(ExpositionBy):
cache_range = settings.CACHE_RANGE cache_range = [60*30, 60*60]
model = Theme model = Theme
title1 = _(u'По тематикам') title1 = _(u'По тематикам')
title2 = _(u'Выставки мира по тематикам') title2 = _(u'Выставки мира по тематикам')
@ -71,7 +71,7 @@ class ExpositionByTheme(ExpositionBy):
# .order_by('translations__name').distinct() # .order_by('translations__name').distinct()
class ExpositionByTag(ExpositionBy): class ExpositionByTag(ExpositionBy):
cache_range = settings.CACHE_RANGE cache_range = [60*30, 60*60]
model = Tag model = Tag
title1 = _(u'По тегам') title1 = _(u'По тегам')
title2 = _(u'Выставки мира по тегам') title2 = _(u'Выставки мира по тегам')
@ -83,7 +83,7 @@ class ExpositionByTag(ExpositionBy):
class ExpositionByCity(ExpositionBy): class ExpositionByCity(ExpositionBy):
cache_range = settings.CACHE_RANGE cache_range = [60*30, 60*60]
model = City model = City
title1 = _(u'По городам') title1 = _(u'По городам')
title2 = _(u'Выставки мира по городам') title2 = _(u'Выставки мира по городам')
@ -146,7 +146,7 @@ def exposition_visit(request, id):
class ExpoDetail(JitterCacheMixin, MetadataMixin, DetailView): class ExpoDetail(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = settings.CACHE_RANGE cache_range = [60*30, 60*60]
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
template_name = 'client/exposition/exposition_detail.html' template_name = 'client/exposition/exposition_detail.html'
@ -163,7 +163,8 @@ class ExpoDetail(JitterCacheMixin, MetadataMixin, DetailView):
return context return context
class ExpositionProgramme(MetadataMixin, DetailView): class ExpositionProgramme(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = [60*30, 60*60]
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
template_name = 'client/exposition/programm.html' template_name = 'client/exposition/programm.html'
@ -179,7 +180,8 @@ class ExpositionProgramme(MetadataMixin, DetailView):
return context return context
class ExpositionPrice(MetadataMixin, DetailView): class ExpositionPrice(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = [60*30, 60*60]
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
template_name = 'client/exposition/price.html' template_name = 'client/exposition/price.html'
@ -195,7 +197,8 @@ class ExpositionPrice(MetadataMixin, DetailView):
return context return context
class ExpositionStatistic(MetadataMixin, DetailView): class ExpositionStatistic(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = [60*30, 60*60]
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
template_name = 'client/exposition/statistic.html' template_name = 'client/exposition/statistic.html'
@ -211,7 +214,8 @@ class ExpositionStatistic(MetadataMixin, DetailView):
return context return context
class ExpositionThankView(MetadataMixin, DetailView): class ExpositionThankView(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = [60*30, 60*60]
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
template_name = 'client/service/thank_u_page.html' template_name = 'client/service/thank_u_page.html'
@ -231,7 +235,8 @@ def visit_redirect(request, slug):
redirect = obj.get_permanent_url() + 'price/' redirect = obj.get_permanent_url() + 'price/'
return HttpResponsePermanentRedirect(redirect) return HttpResponsePermanentRedirect(redirect)
class ExpositionServiceView(MetadataMixin, FormMixin, DetailView): class ExpositionServiceView(JitterCacheMixin, MetadataMixin, FormMixin, DetailView):
cache_range = [60*30, 60*60]
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
service = None service = None
@ -301,7 +306,7 @@ class ExpositionServiceView(MetadataMixin, FormMixin, DetailView):
class ExpoList(MetadataMixin, JitterCacheMixin, ListView): class ExpoList(MetadataMixin, JitterCacheMixin, ListView):
cache_range = settings.CACHE_RANGE cache_range = [60*30, 60*60]
model = Exposition model = Exposition
paginate_by = settings.CLIENT_PAGINATION paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/exposition/exposition_list.html' template_name = 'client/exposition/exposition_list.html'
@ -337,7 +342,7 @@ class ExpoList(MetadataMixin, JitterCacheMixin, ListView):
class ExpoCatalog(MetadataMixin, ListView): class ExpoCatalog(JitterCacheMixin, MetadataMixin, ListView):
model = Exposition model = Exposition
paginate_by = settings.CLIENT_PAGINATION paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/exposition/catalog.html' template_name = 'client/exposition/catalog.html'

@ -2,16 +2,14 @@
import pytils import pytils
import ast import ast
import json import json
import datetime
from django import forms from django import forms
from django.db.models import Q from django.db.models import Q
from django.utils import translation
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from haystack.query import EmptySearchQuerySet, SearchQuerySet from haystack.query import EmptySearchQuerySet, SearchQuerySet
from country.models import Area from country.models import Area
from exposition.models import Exposition from exposition.models import Exposition
from conference.models import Conference from conference.models import Conference
from seminar.models import Seminar
from webinar.models import Webinar
from company.models import Company from company.models import Company
from theme.models import Theme, Tag from theme.models import Theme, Tag
from country.models import Country from country.models import Country
@ -236,17 +234,17 @@ class AbstactSearchForm(forms.Form):
sqs = sqs.filter(place_filter) sqs = sqs.filter(place_filter)
return sqs#.order_by('data_begin') return sqs#.order_by('data_begin')
import datetime
class ExpositionSearchForm(AbstactSearchForm): class ExpositionSearchForm(AbstactSearchForm):
search_url = '/expo/search/' search_url = '/expo/search/'
autocomplete_url = '/search-form/autosearch/exposition/' autocomplete_url = '/search-form/autosearch/exposition/'
title = _(u'ПОИСК СОБЫТИЙ') title = _(u'ПОИСК СОБЫТИЙ')
models = [Exposition] models = [Exposition]
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.all()], th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.expo_themes()],
required=False, widget=forms.CheckboxSelectMultiple()) required=False, widget=forms.CheckboxSelectMultiple())
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple()) tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple())
#co = forms.CharField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple())
area = forms.MultipleChoiceField(label=_(u'Регион'), area = forms.MultipleChoiceField(label=_(u'Регион'),
choices=[(item.id, item.name) for item in Area.objects.language().all()], choices=[(item.id, item.name) for item in Area.objects.language().all()],
@ -268,7 +266,7 @@ class ExpositionSearchForm(AbstactSearchForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ExpositionSearchForm, self).__init__(*args, **kwargs) super(ExpositionSearchForm, self).__init__(*args, **kwargs)
self.theme_classes = {item.id:item.generate_search_class() for item in Theme.objects.all()} self.theme_classes = {item.id:item.generate_search_class() for item in Theme.objects.language().all()}
def search(self): def search(self):
@ -335,109 +333,6 @@ class ExpositionSearchForm(AbstactSearchForm):
return sqs.order_by('data_begin') return sqs.order_by('data_begin')
class PlaceSearchForm(AbstactSearchForm):
search_url = '/places/search/'
autocomplete_url = '/search-form/autosearch/place/'
title = _(u'ПОИСК МЕСТ')
models = [PlaceExposition, PlaceConference]
# place fields
area = forms.MultipleChoiceField(label=_(u'Регион'), choices=[(item.id, item.name) for item in list(Area.objects.language().all())],
required=False, widget=forms.CheckboxSelectMultiple())
co = forms.MultipleChoiceField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple(),
choices=[(item.id, item.name) for item in list(Country.objects.expo_countries())]
)
ci = forms.MultipleChoiceField(label=_(u'Город'), required=False, widget=forms.CheckboxSelectMultiple(),
choices=[(item.id, item.name) for item in list(City.used.expo_cities())]
)
#
place_type = forms.MultipleChoiceField(label=_(u'Тип'), required=False, choices=[])
def get_place_type_display(self):
return _(u'Не важно')
def search(self):
pass
class CompanySearchForm(AbstactSearchForm):
search_url = '/members/search/'
autocomplete_url = '/search-form/autosearch/company/'
title = _(u'ПОИСК УЧАСТНИКОВ')
models = [Company]
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.objects.all()],
required=False, widget=forms.CheckboxSelectMultiple())
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple())
area = forms.MultipleChoiceField(label=_(u'Регион'), choices=[(item.id, item.name) for item in Area.objects.language().all()],
required=False, widget=forms.CheckboxSelectMultiple())
co = forms.MultipleChoiceField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple(),
choices=[(item.id, item.name) for item in Country.objects.expo_countries()]
)
ci = forms.MultipleChoiceField(label=_(u'Город'), required=False, widget=forms.CheckboxSelectMultiple(),
choices=[(item.id, item.name) for item in City.used.expo_cities()]
)
def __init__(self, *args, **kwargs):
super(CompanySearchForm, self).__init__(*args, **kwargs)
self.theme_classes = {item.id:item.generate_search_class() for item in list(Theme.objects.language().all())}
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 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

@ -66,7 +66,7 @@ def error404(request):
class MainPageView(JitterCacheMixin, TemplateView): class MainPageView(JitterCacheMixin, TemplateView):
cache_range = settings.CACHE_RANGE cache_range = [60*3, 60*5]
template_name = 'client/index.html' template_name = 'client/index.html'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):

@ -324,7 +324,7 @@ $(document).ready(function(){
} }
if( $("#id_main_page_news" ).length ) { if( $("#id_tag" ).length ) {
$('#id_tag').select2({ $('#id_tag').select2({
placeholder: "Теги", placeholder: "Теги",
width: '550px', width: '550px',

@ -21,7 +21,7 @@
{% endblocktrans %}{% if expo.place %} {% endblocktrans %}{% if expo.place %}
{% blocktrans with name=expo.place.name url=expo.place.url %}Как добраться до выставочного центра {{ name }} можно {% blocktrans with name=expo.place.name url=expo.place.url %}Как добраться до выставочного центра {{ name }} можно
посмотреть посмотреть
<a href="/places/{{ url }}">здесь</a>.{% endblocktrans %} <a href="/places/{{ url }}/">здесь</a>.{% endblocktrans %}
{% endif %} {% endif %}
{% blocktrans with name=expo.name %} {% blocktrans with name=expo.name %}
Не забудьте проверить место и даты выставки на официальном сайте и в календаре выставочного комплекса. Не забудьте проверить место и даты выставки на официальном сайте и в календаре выставочного комплекса.

Loading…
Cancel
Save