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):
data_with_parents = 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())
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple())
area = forms.MultipleChoiceField(label=_(u'Регион'),

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
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 edit_views import *
@ -8,8 +8,7 @@ from edit_views import *
urlpatterns = patterns('',
url(r'company/create-company/$', 'company.views.create_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<page>\d+)/$', 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 django.shortcuts import get_object_or_404
from django.utils.translation import ugettext as _, get_language
from haystack.query import EmptySearchQuerySet
from models import Company
from theme.models import Theme, Tag
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,\
EmailForm as CompEmailForm, WebPageForm as CompWebPageForm, SocialForm as CompSocialForm,\
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
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):
model = Company
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/'
def get_queryset(self):
@ -67,7 +30,6 @@ class MemberThemeList(MetadataMixin, ListView):
model = Company
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/'
def get_queryset(self):
@ -83,7 +45,6 @@ class MemberTagList(MetadataMixin, ListView):
model = Company
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/'
def get_queryset(self):

@ -10,77 +10,12 @@ from functions.views_help import split_params
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):
paginate_by = 10
params = None
single_page = False
template_name = 'place_catalog_test.html'
model = 'places'
search_form = PlaceSearchForm
order = 'data_begin'
def get_params(self):

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

@ -2,16 +2,14 @@
import pytils
import ast
import json
import datetime
from django import forms
from django.db.models import Q
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
from haystack.query import EmptySearchQuerySet, SearchQuerySet
from country.models import Area
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
@ -236,17 +234,17 @@ class AbstactSearchForm(forms.Form):
sqs = sqs.filter(place_filter)
return sqs#.order_by('data_begin')
import datetime
class ExpositionSearchForm(AbstactSearchForm):
search_url = '/expo/search/'
autocomplete_url = '/search-form/autosearch/exposition/'
title = _(u'ПОИСК СОБЫТИЙ')
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())
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'Регион'),
choices=[(item.id, item.name) for item in Area.objects.language().all()],
@ -268,7 +266,7 @@ class ExpositionSearchForm(AbstactSearchForm):
def __init__(self, *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):
@ -335,109 +333,6 @@ class ExpositionSearchForm(AbstactSearchForm):
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):
cache_range = settings.CACHE_RANGE
cache_range = [60*3, 60*5]
template_name = 'client/index.html'
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({
placeholder: "Теги",
width: '550px',

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

Loading…
Cancel
Save