2009-03-08 8 views
9

Ich arbeite an einer Django App. Einer meiner Modelle, „User“, enthält ein Feld „Geschlecht“, wie unten definiert:Wie kann ich einen Django ModelForm-Menüeintrag standardmäßig auswählen?

GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True) 

ich eine Modelform bin mit einem „neuen Benutzer“ HTML-Formular zu erzeugen. Mein Google-Fu scheint mich im Stich zu lassen - wie kann ich dafür sorgen, dass in diesem HTML-Formular das Element "Männlich" standardmäßig in der Drop-Down-Box ausgewählt ist? (also so selected="selected" für diesen Artikel.)

Antwort

15

Wenn Sie ein leeres Formular mit einem Standardwert ausgewählt benötigen, dann einen ‚Initiale‘ Wörterbuch an den Konstruktor des Modells Form geben Sie den Namen des Feldes als Schlüssel:

form = MyModelForm (initial={'gender':'M'}) 

-OR-

Sie können bestimmte Attribute eines ModelForm mithilfe der deklarativen Natur der Forms-API überschreiben. Dies ist jedoch wahrscheinlich ein wenig umständlich für diesen Anwendungsfall und ich erwähne es nur, um Ihnen zu zeigen, dass Sie es tun können. Möglicherweise finden Sie in Zukunft weitere Verwendungen.

class MyModelForm (forms.ModelForm): 
    gender = forms.ChoiceField (choices=..., initial='M', ...) 
    class Meta: 
     model=MyModel 

-ODER-

Wenn Sie eine Modelform möchten, die auf eine bestimmte Instanz des Modells gebunden ist, können Sie eine ‚Instanz‘ des Modells übergeben, die Django bewirkt, dass der ausgewählte Wert aus, dass ziehen Modell.

form = MyModelForm (instance=someinst) 
+0

Ich habe gerade herausgefunden, dass das Übergeben einer Instanz des Modells, wie Sie es in Ihrer Antwort getan haben, nicht dazu führt, dass Django den ausgewählten Wert in HTML anzeigt. Es funktioniert für Texteingabefelder gut, aber ich brauche es auch für die Auswahl der Eingabe. Irgendwelche Ideen, wie man das umgehen kann? – GChorn

+0

@GChorn Es sollte auch für ausgewählte Felder funktionieren, damit etwas anderes schief geht. Ich würde empfehlen, eine neue Frage zu erstellen und den entsprechenden Code zu posten, damit mehr Leute einen Blick darauf werfen können. –

+0

Hallo Joe, danke für die Antwort, ja ich habe das gestern gemacht aber noch keine Antworten: http://StackOverflow.com/q/16056045/1256700 – GChorn

7

Sicher default wird den Trick machen?

z.B.

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
+0

+1; das hat auch funktioniert; Vielen Dank. – RexE

Verwandte Themen