it-swarm.com.de

Gibt es in Django eine Möglichkeit, Auswahlmöglichkeiten als Kontrollkästchen anzuzeigen?

In der Admin-Oberfläche und in den neuen Formularen gibt es den brillanten Helfer, Entscheidungen definieren zu können. Sie können Code wie folgt verwenden:

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

client_approved = models.CharField(choices=APPROVAL_CHOICES)

um ein Dropdown-Feld in Ihrem Formular zu erstellen und den Benutzer zu zwingen, eine dieser Optionen zu wählen.

Ich frage mich nur, ob es eine Möglichkeit gibt, eine Reihe von Auswahlmöglichkeiten zu definieren, bei denen mehrere mithilfe von Kontrollkästchen ausgewählt werden können. (Wäre auch nett zu sagen, dass der Benutzer eine maximale Anzahl von ihnen auswählen kann.) Es scheint, als ob es sich um eine Funktion handelt, die wahrscheinlich implementiert ist. Ich kann sie nur nicht in der Dokumentation finden.

45
sesh

In Bezug auf die Formularbibliothek würden Sie dazu das MultipleChoiceField - Feld mit einem CheckboxSelectMultiple - Widget verwenden. Sie können die Anzahl der ausgewählten Optionen überprüfen, indem Sie eine Validierungsmethode für das Feld schreiben:

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

Um dies in der Administratoranwendung zu erhalten, müssen Sie eine ModelForm anpassen und das Formular überschreiben, das im entsprechenden ModelAdmin verwendet wird.

80
Jonny Buchanan

@JonnyBuchanan gab die richtige Antwort.

Wenn Sie dies jedoch für viele Modelle im Django-Administrator benötigen und Sie (wie ich) zu faul sind, eine ModelForm anzupassen und die richtigen Methoden in der ModelAdmin-Klasse zu überschreiben, können Sie diesen Ansatz verwenden:

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

0
abidibo