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
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).
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)
Vom Django forms doc:
standardmäßig die
<select>
verwendet Widget vonModelChoiceField
eine eine haben leere Auswahl am Anfang der Liste. Sie können den Text des Labels ändern (die „---------“ ist standardmäßig) mit demempty_label
Attribute, oder Sie können durch das Setzenempty_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.
Arrgghhh, die Lösung in der Verbindung scheint zu kompliziert. Ich denke in diesem Fall, besser auf gewöhnliche Form zurückgreifen. –
das funktioniert nicht – Tony
-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
@Patrick nicht wahr (mindestens seit Django 1.4). Siehe http://stackoverflow.com/a/11721969/898423 –