From a380da7d84c37a18fa5b80fd16d21e2288058a61 Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Tue, 10 Nov 2015 12:45:29 +0200 Subject: [PATCH] Removing extra querysets --- accounts/forms.py | 2 +- company/urls.py | 5 +- company/views.py | 39 ------ core/views.py | 65 ---------- exposition/views.py | 29 +++-- functions/search_forms.py | 115 +----------------- proj/views.py | 2 +- static/custom_js/main.js | 2 +- .../exposition/default_description.html | 2 +- 9 files changed, 28 insertions(+), 233 deletions(-) diff --git a/accounts/forms.py b/accounts/forms.py index 8ab13b3e..195fdfbc 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -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'Регион'), diff --git a/company/urls.py b/company/urls.py index fefa6e3c..0e5e2b37 100644 --- a/company/urls.py +++ b/company/urls.py @@ -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.*)/(?P\d+)/$', CompanyView.as_view()), #url(r'members/(?P\d+)/$', CompanyView.as_view()), #url(r'members/(?P.*)/$', CompanyView.as_view()), diff --git a/company/views.py b/company/views.py index d77a6ca2..9d07eb70 100644 --- a/company/views.py +++ b/company/views.py @@ -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): diff --git a/core/views.py b/core/views.py index 08ecb20c..f50d9256 100644 --- a/core/views.py +++ b/core/views.py @@ -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): diff --git a/exposition/views.py b/exposition/views.py index 3643a636..37118308 100644 --- a/exposition/views.py +++ b/exposition/views.py @@ -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' diff --git a/functions/search_forms.py b/functions/search_forms.py index 88889641..f165586c 100644 --- a/functions/search_forms.py +++ b/functions/search_forms.py @@ -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 diff --git a/proj/views.py b/proj/views.py index 1801b84a..da2a4ba3 100644 --- a/proj/views.py +++ b/proj/views.py @@ -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): diff --git a/static/custom_js/main.js b/static/custom_js/main.js index e5eaa456..acc2173e 100644 --- a/static/custom_js/main.js +++ b/static/custom_js/main.js @@ -324,7 +324,7 @@ $(document).ready(function(){ } - if( $("#id_main_page_news" ).length ) { + if( $("#id_tag" ).length ) { $('#id_tag').select2({ placeholder: "Теги", width: '550px', diff --git a/templates/client/includes/exposition/default_description.html b/templates/client/includes/exposition/default_description.html index b3a5fea3..dfea5ead 100644 --- a/templates/client/includes/exposition/default_description.html +++ b/templates/client/includes/exposition/default_description.html @@ -21,7 +21,7 @@ {% endblocktrans %}{% if expo.place %} {% blocktrans with name=expo.place.name url=expo.place.url %}Как добраться до выставочного центра {{ name }} можно посмотреть - здесь.{% endblocktrans %} + здесь.{% endblocktrans %} {% endif %} {% blocktrans with name=expo.name %} Не забудьте проверить место и даты выставки на официальном сайте и в календаре выставочного комплекса.