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 %}