В Django есть способ отображать варианты в виде флажков? - PullRequest
46 голосов
/ 29 сентября 2008

В интерфейсе администратора и новых формах есть блестящий помощник, который может определять выбор. Вы можете использовать код, подобный этому:

APPROVAL_CHOICES = (
    ('yes', 'Yes'),
    ('no', 'No'),
    ('cancelled', 'Cancelled'),
)

client_approved = models.CharField(choices=APPROVAL_CHOICES)

, чтобы создать в форме раскрывающийся список и заставить пользователя выбрать один из этих вариантов.

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

Ответы [ 2 ]

82 голосов
/ 29 сентября 2008

С точки зрения библиотеки форм, вы должны использовать для этого поле MultipleChoiceField с виджетом CheckboxSelectMultiple . Вы можете проверить количество сделанных выборов, написав метод проверки для поля:

class MyForm(forms.Form):
    my_field = forms.MultipleChoiceField(choices=SOME_CHOICES, widget=forms.CheckboxSelectMultiple())

    def clean_my_field(self):
        if len(self.cleaned_data['my_field']) > 3:
            raise forms.ValidationError('Select no more than 3.')
        return self.cleaned_data['my_field']

Чтобы получить это в приложении администратора, вам нужно настроить ModelForm и переопределить форму, используемую в соответствующем ModelAdmin .

0 голосов
/ 24 ноября 2015

@ Джонни Бьюкенен дал правильный ответ.

Но если вам нужно это в администраторе django для многих моделей, и вы (как и я) слишком ленивы, чтобы настроить ModelForm и переопределить правильные методы внутри класса ModelAdmin, вы можете использовать этот подход:

http://www.abidibo.net/blog/2013/04/10/convert-select-multiple-widget-checkboxes-django-admin-form/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...