Search. Tag catalog

remotes/origin/1203
Kotiuk Nazarii 11 years ago
parent 8373afb967
commit c386c667c0
  1. 4
      conference/urls.py
  2. 10
      conference/views.py
  3. 3
      exposition/urls.py
  4. 11
      exposition/views.py
  5. 45
      functions/search_forms.py
  6. 34
      theme/manager.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<slug>.*)/(?P<year>\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':30}),
url(r'conference/theme/(?P<slug>.*)/$', ConferenceThemeCatalog.as_view(), {'meta_id':29}),
# tag catalog
url(r'conference/tag/$', ConferenceByTag.as_view(), {'meta_id':50}),
url(r'conference/tag/(?P<slug>.*)/(?P<year>\d+)/(?P<month>.*)/page/(?P<page>\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':34}),
url(r'conference/tag/(?P<slug>.*)/(?P<year>\d+)/page/(?P<page>\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':33}),
url(r'conference/tag/(?P<slug>.*)/page/(?P<page>\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':32}),
@ -67,6 +68,7 @@ urlpatterns = patterns('',
url(r'^conference/(?P<slug>.*)/service/thanks/', ConferenceThankView.as_view()),
url(r'conference/(?P<slug>.*)/service/(?P<service_url>.*)/', ConferenceServiceView.as_view()),
# conf list
url(r'conference/(?P<year>\d+)/(?P<month>.*)/page/(?P<page>\d+)/$', ConferenceList.as_view(), {'meta_id':22}),
url(r'conference/(?P<year>\d+)/page/(?P<page>\d+)/$', ConferenceList.as_view(), {'meta_id':21}),

@ -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

@ -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<year>\d+)/(?P<month>.*)/$', ExpoList.as_view(), {'meta_id':4}),
url(r'^expo/(?P<year>\d+)/$', ExpoList.as_view(), {'meta_id':3}),
url(r'^expo/page/(?P<page>\d+)/$', ExpoList.as_view(), {'meta_id':2}),
url(r'^expo/tag/$', ExpositionByTag.as_view(), {'meta_id':2}),
# expo page
url(r'^expo/(?P<slug>.*)/$', ExpoDetail.as_view(), {'meta_id':18}),# event
url(r'^expo/$', ExpoList.as_view() , {'meta_id':2}),

@ -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

@ -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')

@ -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

Loading…
Cancel
Save