From aebffe081d114c9281ca0a3952b6e21765ddfa71 Mon Sep 17 00:00:00 2001 From: Alexander Burdeiny Date: Thu, 4 Aug 2016 17:50:19 +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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- events/forms.py | 46 +++++++++++++++++-- .../client/includes/events/filter_form.html | 4 +- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/events/forms.py b/events/forms.py index 3e4afaf8..430e4973 100644 --- a/events/forms.py +++ b/events/forms.py @@ -27,8 +27,36 @@ from events.common import MEMBERS, VISITORS, PRICE from events.common import members_mapping, visitors_mapping, price_mapping +class FilterCheckboxSelectMultiple(forms.CheckboxSelectMultiple): + def render(self, name, value, attrs=None, choices=()): + if value is None: value = [] + has_id = attrs and 'id' in attrs + final_attrs = self.build_attrs(attrs, name=name) + output = ['') + return mark_safe('\n'.join(output)) + + class CountModelMultipleChoiceField(forms.ModelMultipleChoiceField): - widget = forms.CheckboxSelectMultiple + # widget = forms.CheckboxSelectMultiple + widget = FilterCheckboxSelectMultiple def label_from_instance(self, obj): if obj.get('count', None) is None: return smart_text(obj.get('name')) @@ -62,6 +90,14 @@ class CountModelMultipleChoiceField(forms.ModelMultipleChoiceField): self.run_validators(value) return pks + def widget_attrs(self, widget): + """ + Given a Widget instance (*not* a Widget class), returns a dictionary of + any HTML attributes that should be added to the Widget, based on this + Field. + """ + return {'class': 'default'} + fields_mapping = { 'members': 'members_choice', @@ -87,7 +123,7 @@ class FilterForm(forms.Form): # PRICE = PRICE model = forms.TypedMultipleChoiceField( label=_(u'Тип события'), coerce=int, - choices=TYPES, required=False, widget=forms.CheckboxSelectMultiple()) + choices=TYPES, required=False, widget=FilterCheckboxSelectMultiple()) theme = CountModelMultipleChoiceField( label=_(u'Тематики'), required=False, queryset=Theme.objects.language().values('pk', 'name')) @@ -103,16 +139,16 @@ class FilterForm(forms.Form): price = forms.TypedMultipleChoiceField( label=_(u'Стоимость'), coerce=int, choices=PRICE, - required=False, widget=forms.CheckboxSelectMultiple(), + required=False, widget=FilterCheckboxSelectMultiple(), help_text=_(u'За 1 м2 необорудованной площади')) members = forms.TypedMultipleChoiceField( label=_(u'Участники'), coerce=int, choices=MEMBERS, - required=False, widget=forms.CheckboxSelectMultiple()) + required=False, widget=FilterCheckboxSelectMultiple()) visitors = forms.TypedMultipleChoiceField( label=_(u'Посетители'), coerce=int, choices=VISITORS, - required=False, widget=forms.CheckboxSelectMultiple()) + required=False, widget=FilterCheckboxSelectMultiple()) def __init__(self, *args, **kwargs): super(FilterForm, self).__init__(*args, **kwargs) diff --git a/templates/client/includes/events/filter_form.html b/templates/client/includes/events/filter_form.html index c3754d11..3890e98f 100644 --- a/templates/client/includes/events/filter_form.html +++ b/templates/client/includes/events/filter_form.html @@ -6,9 +6,9 @@ {% for field in form %} {% if field.errors %}error{% endif %} + {{ field.help_text|safe }} {{ field }} - {{ field.errors }} - {{ field.help_text }} + {{ field.errors }} {% endfor %}