ChoiceField with empty value, select default value django. Вставить пустое значение в тег селект
29 октября 2014 г. 2:31
Если мы имеем дело с обычно формой forms.Form
(и в особом случае при использовании forms.ModelForm
, см. ниже) и хотим иметь пустое значение при выборе в селекте, то нам нужно позаботиться о создании пустого значения вручную.
Для того, чтобы вставить пустое значение в тег селект, можно использовать два варианта: либо на уровне серверной части, либо на клиентской.
На уровне Django
1-ый способ - с использованием ChoiceField
class MyForm(forms.Form): SERVICES = ((REG_IP, u'Регистрация ИП'), (REG_OOO, u'Регистрация ООО')) SUBJECTS = ((SERVICE, u'Услуга'), (PARTNERSHIP, u'Сотрудничество'), blank_choice = (('', '--- Выберите значение ---'),) service = forms.ChoiceField(choices=blank_choice + SERVICES) subject = forms.ChoiceField(choices=blank_choice + SUBJECTS)
2-ой способ - с использованием ModelChoiceField
class MyForm(forms.ModelForm): field_name = forms.ModelChoiceField(queryset=Position.objects.all().values_list('id', 'field'), empty_label="--- Выберите значение ---") class Meta: model = MyModel
3-ой способ - с использованием ModelChoiceField (установка пустого значения через инициализацию формы __init__)
class MyForm(forms.ModelForm): class Meta: model = MyModel def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields['field_name'].empty_label = "--- Выберите значение ---" self.fields['field_name'].queryset = Choice.objects.all().values_list('id', 'field')
На уровне html
# 1-ый способ: <select> <option disabled="disabled" selected="selected" value="">--- Выберите значение ---</option> <option>Регистрация ИП</option> <option>Регистрация ООО</option> </select>
На уровне js
# 2-ой способ (с использование jquery): $('select').each(function(){ $(this).find('option[value=disable_value]').attr({'selected': '', 'disabled': '', 'value': ''}); });
Каждый из способов по-своему хорош, имея свои преимущества по сравнению с другими. Также можно использовать и на сервере обработку селекта и на клиенте, что повысит уровень обработки форм на сайте.
В заключении скажу, что применение зависит от архитектуры связки серверной и клиентской части кода.
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0