2016-04-10 11 views
1

Ich benutze Django, um ein Formular zu erstellen. Das Formular enthält eine models.SmallIntegerField.Standardmäßige leere Option entfernen ----- mit leer = True

Das Feld hat eine Standardblankoption (angezeigt als "------").

Wie kann ich diese leere Option loswerden?

Bitte beachten Sie, dass das Feld nicht benötigt wird (leer = True), daher funktioniert die default=None, blank=False Lösung in meinem Fall nicht.

+0

Warum möchten Sie die leere Option entfernen, wenn das Feld nicht benötigt wird? – dietbacon

+0

Da der Benutzer ein Kontrollkästchen "Daten nicht verfügbar" auswählen kann, und wenn es aktiviert ist, ist das Feld nicht erforderlich. Wenn nicht aktiviert, ist das Feld erforderlich. – Vingtoft

+0

Und weil ich das RadioSelect-Widget verwende, sieht es mit dem Feld "----" seltsam aus. – Vingtoft

Antwort

0

Ich habe die Lösung selbst gefunden: Es ist hacky und hässlich, aber es funktioniert.

Fühlen Sie sich frei, eine andere Antwort zu kommentieren oder zu posten, wenn Sie eine bessere Lösung haben.

class myModelForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(myModelForm, self).__init__(*args, **kwargs) 
     self.fields['choose'].choices = self.fields['choose'].choices[1:] 

    class Meta: 
     model = myModel 
     widgets = { 
      'choose': RadioSelect(), 
     } 
+0

Eine andere Option wäre, das Widget unterzuklassen und eine js-Datei laden zu lassen, die immer die erste Option entfernt. Denke nicht, dass es besser ist. – dietbacon

+0

Das würde wahrscheinlich funktionieren, aber es klingt wie der Hack ist genauso hässlich ;-) – Vingtoft

Verwandte Themen