Закрыть

Для эффективной работы на сайте используются cookie и обработка персональных данных. Пользуясь этим сайтом, вы соглашаетесь с правилами использования сайта. Подробнее

Цитата дня

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 (всего 2 оценки)

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

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

Автор статьи

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/it/select-default-value-django/:

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

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

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

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

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

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

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

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

Попробуйте