Подтвердить что ты не робот

В Django есть способ отображать варианты как флажки?

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

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

client_approved = models.CharField(choices=APPROVAL_CHOICES)

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

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

4b9b3361

Ответ 1

В терминах библиотеки форм вы должны использовать поле 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']

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

Ответ 2

@JonnyBuchanan дал правильный ответ.

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

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