В Django есть способ отображать варианты как флажки?
В интерфейсе администратора и newforms есть блестящий помощник в возможности определять варианты. Вы можете использовать такой код:
APPROVAL_CHOICES = (
('yes', 'Yes'),
('no', 'No'),
('cancelled', 'Cancelled'),
)
client_approved = models.CharField(choices=APPROVAL_CHOICES)
чтобы создать раскрывающийся список в форме и заставить пользователя выбрать один из этих параметров.
Мне просто интересно, есть ли способ определить набор вариантов, где несколько можно выбрать с помощью флажков? (Также было бы неплохо иметь возможность сказать, что пользователь может выбрать максимальное количество из них.) Кажется, что это функция, которая, вероятно, реализована, просто я не могу найти ее в документации.
Ответы
Ответ 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/