ChoiceField with empty value, select default value django. Вставить пустое значение в тег селект

28 октября 2014 г. 22: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': ''});
    });

Каждый из способов по-своему хорош, имея свои преимущества по сравнению с другими. Также можно использовать и на сервере обработку селекта и на клиенте, что повысит уровень обработки форм на сайте.

В заключении скажу, что применение зависит от архитектуры связки серверной и клиентской части кода.

Оцените статью

5 из 5 (всего 5 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/select-default-value-django/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/select-default-value-django/">https://vivazzi.pro/ru/it/select-default-value-django/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц