2008-09-29 12 views
42

En la interfaz de administración y las formas nuevas está el ayudante brillante de poder definir las opciones. Puede utilizar código como este:En Django, ¿hay alguna manera de mostrar las opciones como casillas de verificación?

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

client_approved = models.CharField(choices=APPROVAL_CHOICES) 

para crear un cuadro desplegable en su forma y obligar al usuario a elegir una de estas opciones.

Me pregunto si existe alguna manera de definir un conjunto de opciones donde se pueda elegir múltiples usando casillas de verificación. (También sería bueno poder decir que el usuario puede seleccionar un número máximo de ellos.) Parece que es una característica que probablemente esté implementada, es solo que parece que no puedo encontrarla en la documentación.

Respuesta

77

En términos de la biblioteca de formularios, debe usar el campo MultipleChoiceField con un widget CheckboxSelectMultiple para hacerlo. Se podía validar el número de opciones que se hicieron escribiendo un método de validación para el 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 conseguir esto en la aplicación de administración, que había necesidad de personalizar un ModelForm y override the form used in the appropriate ModelAdmin.

Cuestiones relacionadas