Закрыть

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

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Если человек стремится к чему-то всем своим сердцем, он обязательно сумеет добиться того, чего хочет, даже если это кажется невозможным, даже если все окружающие открыто заявляют ему, что это невозможно.

Чак Норрис

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" после своего запроса.

Попробуйте