Python/Django BooleanField Modell mit RadioSelect form standardmäßig leer
Ich bin mit einem Django ModelForm, wo mein Modell enthält eine BooleanField und das form-widget zugeordnet, die BooleanField ist ein RadioSelect widget. Ich möchte das die RadioSelect widget, die macht zu haben, keine Optionen aktiviert, so hat der Benutzer explizit eine Wahl treffen, aber der Formular-Validierung fehl, wenn Sie keine Auswahl treffen. Gibt es eine Möglichkeit, dies zu tun?
models.py
myboolean = models.BooleanField(choices=YES_NO)
forms.py
class myModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(myModelForm, self).__init__(*args, **kwargs)
self.fields['myboolean'].widget = forms.RadioSelect(choices=YES_NO)
InformationsquelleAutor Joe J | 2010-08-12
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code tatsächlich tut, was Sie brauchen. Es macht die radio-buttons mit nicht ausgewählten Optionen und generiert die error-Meldung, wenn nichts ausgewählt ist.
Einen kleinen Hinweis zu Ihrem Formular-code. Ich würde es so machen:
Leider, dies ist weniger ein Django-Problem als eine HTML-Frage. Die HTML-Spezifikation (RFC1866) sagt:
Allerdings Browser haben in der Vergangenheit ignoriert dies und umgesetzt Optionsfelder in unterschiedlicher Weise.
HTML auch macht dies schwierig, da das "checked" - Attribut des <INPUT> - tag nicht nehmen, einen parameter, so dass Sie nicht verwenden können, eine benutzerdefinierte Django widget, das setzt dieses Attribut auf False oder No.
Ein möglicher workaround ist das setzen in ein wenig Javascript, das ausgeführt wird als Teil des Dokuments, das onLoad-Ereignis findet alle radio-buttons auf die Seite und setzt das 'checked' - Attribut auf false (mit JQuery, zum Beispiel).
sehen:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#a-full-example
Ich erstellt benutzerdefinierte-Feld mit dem Standard-widget.
Schnitt meiner models.py:
Feld definition: