2010-10-14 4 views
5

Wenn das Feld eines Modells eine Auswahl oder einen Fremdschlüssel ist, ist das Widget auf der Seite ein ausgewählter Eingang oder ein Radio, wenn Sie dies angeben. Django platziert "---------" in dem ersten Element als einen nicht ausgewählten Wert. Wie kann ich es überschreiben oder sogar entfernen? Ich erinnere mich daran, wie ich es gelesen habe, kann es aber nicht mehr finden.So entfernen Sie das nicht ausgewählte Element in einer Auswahl- und Radioeingabe in Django

Antwort

6

See: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Wenn das Modellfeld hat Entscheidungen festgelegt, dann das Widget-Formularfeld Set sein zu wählen, mit Entscheidungen aus dem Modellfeld der Auswahl kommen. Die Auswahl enthält normalerweise die freie Auswahl, die durch Standard ausgewählt wird. Wenn das Feld erforderlich ist, erzwingt der Benutzer eine Auswahl. Die leere Auswahl wird nicht enthalten sein, wenn das Modellfeld blank = False und einen expliziten Standardwert Wert (der Standardwert wird stattdessen anfänglich ausgewählt).

3

Wenn es ein Modelform ist, stellen nur default=None in Ihrem Modell, wie folgt aus:

choose = models.CharField(max_length=3, choices=choose_dict, default=None) 
+1

das funktioniert nicht – Tony

+0

-1: 'default' wird auf der Datenbankebene verwendet, nicht auf der Formularebene. Wenn der Wert beim Erstellen des Modellobjekts nicht festgelegt wird, wird der Wert auf "None" gesetzt. Gefährlicher Hinweis – Patrick

+0

@Patrick nicht wahr (mindestens seit Django 1.4). Siehe http://stackoverflow.com/a/11721969/898423 –

6

Vom Django forms doc:

standardmäßig die <select> verwendet Widget von ModelChoiceField eine eine haben leere Auswahl am Anfang der Liste. Sie können den Text des Labels ändern (die „---------“ ist standardmäßig) mit dem empty_label Attribute, oder Sie können durch das Setzen empty_label=None das leere Etikett vollständig deaktivieren:

field2 = forms.ModelChoiceField(queryset=..., empty_label=None)

Wenn Sie dies auf einem ModelForm tun müssen, hatte ich eine Antwort here.

+0

Arrgghhh, die Lösung in der Verbindung scheint zu kompliziert. Ich denke in diesem Fall, besser auf gewöhnliche Form zurückgreifen. –