diff --git a/conference/urls.py b/conference/urls.py index e5907ab2..439fa230 100644 --- a/conference/urls.py +++ b/conference/urls.py @@ -2,7 +2,7 @@ from django.conf.urls import patterns, include, url from views import ConferenceDetail, ConferenceList, ConferenceByCity, ConferenceByCountry, ConferenceByTheme,\ ConferenceCountryCatalog, ConferenceCityCatalog, ConferenceTagCatalog, ConferenceThemeCatalog, ConferenceMembers,\ - ConferenceVisitors, ConferenceServiceView, ConferenceThankView + ConferenceVisitors, ConferenceServiceView, ConferenceThankView, ConferenceByTag from exposition.views import ExpositionSearchView urlpatterns = patterns('', @@ -53,6 +53,7 @@ urlpatterns = patterns('', url(r'conference/theme/(?P.*)/(?P\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':30}), url(r'conference/theme/(?P.*)/$', ConferenceThemeCatalog.as_view(), {'meta_id':29}), # tag catalog + url(r'conference/tag/$', ConferenceByTag.as_view(), {'meta_id':50}), url(r'conference/tag/(?P.*)/(?P\d+)/(?P.*)/page/(?P\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':34}), url(r'conference/tag/(?P.*)/(?P\d+)/page/(?P\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':33}), url(r'conference/tag/(?P.*)/page/(?P\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':32}), @@ -67,6 +68,7 @@ urlpatterns = patterns('', url(r'^conference/(?P.*)/service/thanks/', ConferenceThankView.as_view()), url(r'conference/(?P.*)/service/(?P.*)/', ConferenceServiceView.as_view()), + # conf list url(r'conference/(?P\d+)/(?P.*)/page/(?P\d+)/$', ConferenceList.as_view(), {'meta_id':22}), url(r'conference/(?P\d+)/page/(?P\d+)/$', ConferenceList.as_view(), {'meta_id':21}), diff --git a/conference/views.py b/conference/views.py index 1415f008..3363cc12 100644 --- a/conference/views.py +++ b/conference/views.py @@ -53,6 +53,16 @@ class ConferenceByCountry(ConferenceBy): # .filter(conference_country__country__isnull=False, translations__language_code=lang)\ # .order_by('translations__name').distinct() +class ConferenceByTag(ConferenceBy): + model = Tag + title1 = _(u'По тегам') + title2 = _(u'Коференции мира по тегам') + catalog = 'tag/' + + def get_queryset(self): + return self.model.active.conference_themes_with_count() + + class ConferenceByTheme(ConferenceBy): model = Theme diff --git a/exposition/urls.py b/exposition/urls.py index 2c1743f6..cad06b17 100644 --- a/exposition/urls.py +++ b/exposition/urls.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url from views import ExpositionStatistic, ExpositionPrice,\ - ExpositionProgramme, ExpositionSearchView, ExpositionByCountry, ExpositionByTheme, ExpositionByCity + ExpositionProgramme, ExpositionSearchView, ExpositionByCountry, ExpositionByTheme, ExpositionByCity, ExpositionByTag from django.views.decorators.cache import cache_page @@ -79,6 +79,7 @@ urlpatterns = patterns('', url(r'^expo/(?P\d+)/(?P.*)/$', ExpoList.as_view(), {'meta_id':4}), url(r'^expo/(?P\d+)/$', ExpoList.as_view(), {'meta_id':3}), url(r'^expo/page/(?P\d+)/$', ExpoList.as_view(), {'meta_id':2}), + url(r'^expo/tag/$', ExpositionByTag.as_view(), {'meta_id':2}), # expo page url(r'^expo/(?P.*)/$', ExpoDetail.as_view(), {'meta_id':18}),# event url(r'^expo/$', ExpoList.as_view() , {'meta_id':2}), diff --git a/exposition/views.py b/exposition/views.py index 0f50018c..98dac122 100644 --- a/exposition/views.py +++ b/exposition/views.py @@ -71,6 +71,17 @@ class ExpositionByTheme(ExpositionBy): # .filter(exposition_themes__theme__isnull=False, translations__language_code=lang)\ # .order_by('translations__name').distinct() +class ExpositionByTag(ExpositionBy): + cache_range = settings.CACHE_RANGE + model = Tag + title1 = _(u'По тегам') + title2 = _(u'Выставки мира по тегам') + catalog = 'tag/' + + def get_queryset(self): + return self.model.active.expo_themes_with_count() + + class ExpositionByCity(ExpositionBy): cache_range = settings.CACHE_RANGE diff --git a/functions/search_forms.py b/functions/search_forms.py index d24eb185..fc0d34a7 100644 --- a/functions/search_forms.py +++ b/functions/search_forms.py @@ -179,21 +179,26 @@ class AbstactSearchForm(forms.Form): co = self.cleaned_data.get('co') ci = self.cleaned_data.get('ci') area = self.cleaned_data.get('area') - sqs = SearchQuerySet().models(*self.models).all() - - if q: - sqs = sqs.autocomplete(content_auto=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 th: - sqs = sqs.filter(theme__in=th) - if tg: - sqs = sqs.filter(tag__in=tg) + + if th or tg: + if th: + sqs = sqs.filter(theme__in=th) + if tg: + sqs = sqs.filter(tag__in=tg) + else: + if q: + sqs = sqs.autocomplete(content_auto=q) + + + if w: + sqs = sqs.filter(where__contains=w) + + place_filter = None @@ -276,18 +281,19 @@ class ExpositionSearchForm(AbstactSearchForm): sqs = SearchQuerySet().models(Exposition).all() - if q: - sqs = sqs.autocomplete(content_auto=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 th: - sqs = sqs.filter(theme__in=th) - if tg: - sqs = sqs.filter(tag__in=tg) + + if th or tg: + if th: + sqs = sqs.filter(theme__in=th) + if tg: + sqs = sqs.filter(tag__in=tg) + else: + if q: + sqs = sqs.autocomplete(content_auto=q) place_filter = None @@ -313,6 +319,9 @@ class ExpositionSearchForm(AbstactSearchForm): #sqs = sqs.filter(city_id__in=ci) if place_filter: sqs = sqs.filter(place_filter) + else: + if w: + sqs = sqs.filter(where__contains=w) return sqs.order_by('data_begin') diff --git a/theme/manager.py b/theme/manager.py index 28bf7769..48fb19f6 100644 --- a/theme/manager.py +++ b/theme/manager.py @@ -136,3 +136,37 @@ class TagActiveManager(TranslationManager): cache.set(key, tags, self.cache_time) return tags + def expo_themes_with_count(self): + lang = translation.get_language() + key = 'used_expo_tags_count_%s'%lang + cached_tags = cache.get(key) + if cached_tags: + return cached_tags + else: + + from exposition.models import Exposition + now = datetime.datetime.now().date() + # id of unique cities + tags_id = [item['tag'] for item in Exposition.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()] + #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) + tags = set(list(self.language().filter(id__in=tags_id))) + tags = sorted(tags, key=lambda x: x.name) + cache.set(key, tags, self.cache_time) + return tags + + def conference_themes_with_count(self): + lang = translation.get_language() + key = 'used_conference_tags_count_%s'%lang + cached_tags = cache.get(key) + if cached_tags: + return cached_tags + else: + from conference.models import Conference + now = datetime.datetime.now().date() + # id of unique cities + tags_id = [item['tag'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()] + #themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql))) + tags = set(list(self.language().filter(id__in=tags_id))) + tags = sorted(tags, key=lambda x: x.name) + cache.set(key, tags, self.cache_time) + return tags