No Django, há uma maneira para exibir opções como caixas de seleção?

votos
43

Na interface de administração e newforms há a brilhante ajudante de ser capaz de definir escolhas. Você pode usar um código como este:

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

client_approved = models.CharField(choices=APPROVAL_CHOICES)

para criar uma caixa suspensa na sua forma e forçar o usuário a escolher uma dessas opções.

Eu só estou querendo saber se existe uma maneira de definir um conjunto de opções onde múltiplos podem ser escolhidos usando caixas de seleção? (Também seria bom ser capaz de dizer que o usuário pode selecionar um número máximo de-los.) Parece que é uma característica que provavelmente é implementado, é só eu não consigo encontrá-lo na documentação.

Publicado 29/09/2008 em 07:53
fonte usuário
Em outras línguas...                            


2 respostas

votos
78

Em termos da biblioteca de formulários, você usaria o MultipleChoiceField campo com um CheckboxSelectMultiple widget para fazer isso. Você poderia validar o número de escolhas que foram feitas por escrever um método de validação para o campo:

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']

Para obter esta na aplicação admin, você precisa de personalizar um ModelForm e substituir o formulário usado na ModelAdmin apropriado .

Respondeu 29/09/2008 em 08:17
fonte usuário

votos
0

@JonnyBuchanan deu a resposta certa.

Mas se você precisar isso no Django admin para muitos modelos, e você está (como eu) com preguiça de personalizar um ModelForm e ovverride os métodos adequados dentro da classe ModelAdmin, você pode usar essa abordagem:

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

Respondeu 24/11/2015 em 15:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more