Django ChoicesField делитель? - PullRequest
       15

Django ChoicesField делитель?

0 голосов
/ 13 февраля 2010

Я использую ChoicesField в своей форме, но я хочу поместить в нее разделитель следующим образом:

COUNTRIES = (
    ('CA', _('Canada')),
    ('US', _('United States')),
    (None, _('---')), # <----------
    ('AF', _('Afghanistan')),
    ('AX', _('Aland Islands')),
    ('AL', _('Albania')),
    ('DZ', _('Algeria')),
    ('AS', _('American Samoa')),
    # ...

class AddressForm(forms.Form):
    country = forms.ChoiceField(choices=COUNTRIES, initial='CA')

Какой самый простой способ сделать это невыбираемым или, по крайней мере, выдать ошибку, если пользователь ее выберет?

Ответы [ 3 ]

1 голос
/ 04 декабря 2014

Вы можете использовать это: https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices

Вы бы отформатировали его так:

COUNTRIES = [
    ("CA", _("Canada")),
    ("US", _("United States")),

    # This format will indent the nested tuples over and the 
    # "-----" will be un-selectable
    #
    ("---------------", ( # This will be a header for the items nested below
        ("AF", _("Afghanistan")),
        ('AX', _('Aland Islands')),
        ('AL', _('Albania')),
        ('DZ', _('Algeria')),
        ('AS', _('American Samoa')),


        )
    ),
]
1 голос
/ 08 октября 2016

Я не знаю, какую версию Django вы используете, но я пользуюсь 1.10.1, и я использовал следующее:

ICONS = (
    (None,                      ''),
    (None,                      '==Extra Contact Info=='),
    ('phone',                   'Phone'),
    ('phone',                   'Phone (square)'),
    ('fax',                     'Fax'),
    ('envelope',                'E-mail (black)'),
    ('envelope-o',              'E-mail (white/clear)'),
    (None,                      ''),
    (None,                      '==Social Media=='),
    ('facebook',                'Facebook'),
    ('facebook-official',       'Facebook (official)'),
    ('facebook-square',         'Facebook (square)'),
    ('google-plus',             'Google Plus'),
    ...
)

и это все, что я использовал, и если пользователь выбирает какой-либо элемент списка в раскрывающемся меню, в котором есть значение «Нет», он будет лаять на пользователя, говоря «Это поле обязательно для заполнения».

Теперь ... конечно, в моем проекте список вариантов используется на моей странице what.com/admin, но это может быть неактуально. Однако важно то, что вы должны убедиться, что поле класса вашей модели (или формы) не содержит «blank = True». По умолчанию оно должно быть ложным, если вы его опускаете, другими словами, поле не будет принимать пустые или пустые строковые значения. Это должно быть все, что вам нужно ...

1 голос
/ 13 февраля 2010

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

class AddressForm(forms.Form):
  country = forms.ChoiceField(choices=COUNTRIES, initial='CA')

  def clean_country(self):
    data = self.cleaned_data["country"]
    if not data:
       raise forms.ValidationError("You must select a valid country.")
    return data  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...