Отображение «Пожалуйста, выберите:» в виджете `Select` в Django - PullRequest
4 голосов
/ 02 апреля 2011

Я делаю форму Django и использую ChoiceField, которая генерирует поле <select> с различными параметрами.Мне бы хотелось, чтобы в первом поле <select> было указано «Пожалуйста, выберите:», и если пользователь отправит форму без выбора, он получит ошибку.это?

1 Ответ

4 голосов
/ 02 апреля 2011

Похоже, у Django нет встроенной поддержки для такого запроса. Вы можете достичь этого, создав подкласс ChoiceField и приняв аргумент blank_choice. например,

from django import forms


class ChoiceField(forms.ChoiceField):
    def __init__(self, *args, **kwargs):
        self.blank_choice = kwargs.pop('blank_choice', None)
        super(ChoiceField, self).__init__(*args, **kwargs)

    def _get_choices(self):
        return self._choices

    def _set_choices(self, value):
        choices = list(value)
        if self.blank_choice:
            choices = [('', self.blank_choice)] + choices
        self._choices = self.widget.choices = choices

    choices = property(_get_choices, _set_choices)

Этот пустой выбор добавляется перед обычным набором вариантов и рассматривается как пустое значение. (Вот почему я использовал None в качестве значения, связанного с выбором self.blank_choice, как в кортеже django.core.validators.EMPTY_VALUES).

Чтобы использовать его, используйте ChoiceField вместо того, который предоставлен Django, и передайте значение для blank_choice, например,

from django import forms
from myproject.formfields import ChoiceField

NAMES = (
    ('brad', 'Brad'),
    ('sam', 'Sam'),
)

class MyForm(forms.Form):
    names = ChoiceField(choices=NAMES, blank_choice='Please choose:')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...