From 94f80ee858d2a29b109de321724ae1d3d4da32c3 Mon Sep 17 00:00:00 2001 From: Alexander Burdeiny Date: Fri, 5 Aug 2016 17:29:00 +0300 Subject: [PATCH] =?UTF-8?q?1461:=20=D0=AD=D1=82=D0=B0=D0=BF=20=E2=84=965:?= =?UTF-8?q?=20=D0=A4=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B9=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=20=D0=BD=D0=B0=20=D0=B0=D1=8F=D0=BA=D1=81=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=20(=D0=B2=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B0=D0=B5=D1=82=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B5=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- events/common.py | 6 ----- events/forms.py | 16 ++++++++---- events/views.py | 5 +++- .../client/events/filter_listview_ajax.html | 25 +++++++++++++++++++ 4 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 templates/client/events/filter_listview_ajax.html diff --git a/events/common.py b/events/common.py index 6e610b09..eb4600a2 100644 --- a/events/common.py +++ b/events/common.py @@ -40,12 +40,6 @@ def get_choices_kwargs(mapping): MEMBERS = EnumChoices(**get_choices_kwargs(members_mapping)) VISITORS = EnumChoices(**get_choices_kwargs(visitors_mapping)) PRICE = EnumChoices(**get_choices_kwargs(price_mapping)) -# N200=(1, _(u'до 200')), -# N200500=(2, _(u'200-500')), -# N5001000=(3, _(u'500-1000')), -# N10002000=(4, _(u'1000-2000')), -# N2000=(5, _(u'более 2000')), -# ) class ExtraWhere(object): diff --git a/events/forms.py b/events/forms.py index bc2152ca..095a385d 100644 --- a/events/forms.py +++ b/events/forms.py @@ -235,7 +235,7 @@ class FilterForm(forms.Form): return qs def recalculate_choices(self): - print(self._is_valid) + # print(self._is_valid) # if self._is_valid and self.lookup_kwargs: for field in ['theme', 'tag', 'city', 'country']: @@ -265,7 +265,7 @@ class FilterForm(forms.Form): qs.query.having.add(ExtraWhere(having, [], OR), AND) qs = qs.values(*values).order_by(*order_by) self.fields[field].queryset = qs - print(self.fields[field].queryset.query) + # print(self.fields[field].queryset.query) for field in ['members', 'visitors', 'price']: self.fields[field].choices = self.make_local_field_count(field) or self.fields[field].choices @@ -368,16 +368,22 @@ class FilterForm(forms.Form): selects.append(select + ''.join(joins) + ' where ' + ' and '.join(where) + group_by) sql = ' union '.join(selects) - print(sql) + # print(sql) choices = [] if sql: - with connection.cursor() as c: + c = connection.cursor() + try: c.execute(sql) mapper = namedtuple('Result', [col[0] for col in c.description]) data = [mapper(*raw) for raw in c.fetchall()] for key, val in _values_mapping: count = sum([getattr(x, key, 0) or 0 for x in data]) choices.append((val.get('value'), val.get('label') + ' ({count})'.format(count=count))) + finally: + c.close() + # some bug with these! + # AttributeError: __exit__ + # with connection.cursor() as c: return choices def make_default_where(self, **kwargs): @@ -388,7 +394,7 @@ class FilterForm(forms.Form): selects = [] case = None count = None - print('looking {} {}'.format(field, self.lookup_kwargs)) + # print('looking {} {}'.format(field, self.lookup_kwargs)) for model in self.models: _field, _model, direct, m2m = model._meta.get_field_by_name(field) joins = [] diff --git a/events/views.py b/events/views.py index e5769f2f..da3573f0 100644 --- a/events/views.py +++ b/events/views.py @@ -16,7 +16,8 @@ class FilterListView(ContextMixin, FormMixin, ListView): initial_ctx = {'filtering': True} form_class = FilterForm paginate_by = settings.CLIENT_PAGINATION - template_name = 'events/filter_listview.html' + _template_name = 'events/filter_listview.html' + _template_name_ajax = 'events/filter_listview_ajax.html' def get_form_kwargs(self): kwargs = super(FilterListView, self).get_form_kwargs() @@ -34,6 +35,8 @@ class FilterListView(ContextMixin, FormMixin, ListView): def get(self, request, *args, **kwargs): self.form = self.get_form(self.get_form_class()) self.extra_ctx['form'] = self.form + # ajax or get + self.template_name = self._template_name_ajax if request.is_ajax() else self._template_name return super(FilterListView, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): diff --git a/templates/client/events/filter_listview_ajax.html b/templates/client/events/filter_listview_ajax.html new file mode 100644 index 00000000..bfee2165 --- /dev/null +++ b/templates/client/events/filter_listview_ajax.html @@ -0,0 +1,25 @@ +{% load i18n %} +{% load template_filters %} + +{% block content_list %} + {% with query=object_list %} + {% if query %} + {% include 'client/includes/events/filter_result.html' %} + {% else %} +

+ + + + + {% trans "Увы, событий, соответствующих выбранным фильтрам, нет в каталоге.
Попробуйте укрупнить параметры фильтрации" %} +
+

+ {% endif %} + {% endwith %} +{% endblock %} + +{% block paginator %} + {% with page_obj=page_obj queries=queries %} + {% include 'client/includes/search_paginator.html' %} + {% endwith %} +{% endblock %}