2008-09-29 6 views
42

Dans l'interface d'administration et les nouvelles formes, il y a l'aide géniale de pouvoir définir des choix. Vous pouvez utiliser le code comme ceci:Dans Django, existe-t-il un moyen d'afficher les choix sous forme de cases à cocher?

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

client_approved = models.CharField(choices=APPROVAL_CHOICES) 

pour créer une liste déroulante dans votre formulaire et forcer l'utilisateur à choisir l'une de ces options. Je me demande simplement s'il existe un moyen de définir un ensemble de choix où plusieurs peuvent être choisis à l'aide de cases à cocher? (Serait également agréable de pouvoir dire que l'utilisateur peut sélectionner un nombre maximum d'entre eux.) Il semble que c'est une fonctionnalité qui est probablement mise en œuvre, c'est juste que je ne peux pas trouver dans la documentation.

Répondre

77

En termes de bibliothèque de formulaires, vous devez utiliser le champ MultipleChoiceField avec un widget CheckboxSelectMultiple pour ce faire. Vous pouvez valider le nombre de choix qui ont été faites par écrit une méthode de validation pour le champ:

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

Pour obtenir ce dans l'application d'administration, vous auriez besoin de personnaliser un ModelForm et override the form used in the appropriate ModelAdmin.

Questions connexes