Hier ist die Felddeklaration in einer Form:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Ich möchte den Anfangswert auf setzen 3
und dies scheint nicht zu funktionieren. Ich habe mit dem Parameter, Anführungszeichen / keine Anführungszeichen usw. herumgespielt, aber keine Änderung.
Könnte mir jemand eine endgültige Antwort geben, wenn es möglich ist? Und / oder die notwendige Optimierung in meinem Code-Snippet?
Ich benutze Django 1.0
django
django-models
django-forms
thebiglife
quelle
quelle
Antworten:
Versuchen Sie, den Anfangswert festzulegen, wenn Sie das Formular instanziieren:
quelle
'3'
der erste Wert des Tupels oder der zweite?Dies berührt nicht die unmittelbare Frage, aber diese Frage / Antwort wird für Suchvorgänge im Zusammenhang mit dem Versuch, den ausgewählten Wert einem zuzuweisen, angezeigt
ChoiceField
.Wenn Sie
super().__init__
Ihre Form-Klasse bereits aufgerufen haben , sollten Sie dasform.initial
Wörterbuch und nicht diefield.initial
Eigenschaft aktualisieren . Wenn Sie studierenform.initial
(z. B.print self.initial
nach dem Aufruf vonsuper().__init__
), enthält es Werte für alle Felder. Ein Wert vonNone
in diesem Diktat überschreibt denfield.initial
Wert.z.B
quelle
Sie können auch Folgendes tun. in deiner Form Klasse def:
Wenn Sie dann das Formular in Ihrer Ansicht aufrufen, können Sie sowohl die anfänglichen Auswahlmöglichkeiten als auch die Auswahlliste dynamisch festlegen.
Hinweis: Die Anfangswerte müssen eine Liste sein und die Auswahl muss 2-Tupel sein. In meinem obigen Beispiel habe ich eine Liste von 2-Tupeln. Hoffe das hilft.
quelle
initial
auf den Schlüssel des auszuwählenden Elements bezieht, nicht auf dessen Index. Ich habe ein paar Versuche unternommen, um das herauszufinden!Ich bin auch auf dieses Problem gestoßen und habe herausgefunden, dass das Problem im Browser liegt. Wenn Sie aktualisieren, füllt der Browser das Formular erneut mit denselben Werten wie zuvor und ignoriert das aktivierte Feld. Wenn Sie die Quelle anzeigen, sehen Sie, dass der aktivierte Wert korrekt ist. Oder setzen Sie den Cursor in das URL-Feld Ihres Browsers und drücken Sie die Eingabetaste. Dadurch wird das Formular von Grund auf neu geladen.
quelle
Die Antworten von Tom und Burton funktionieren schließlich für mich, aber ich hatte ein wenig Probleme herauszufinden, wie ich sie auf a anwenden kann
ModelChoiceField
.Der einzige Trick besteht darin, dass die Auswahlmöglichkeiten als Tupel von gespeichert
(<model's ID>, <model's unicode repr>)
werden. Wenn Sie also die anfängliche Modellauswahl festlegen möchten, übergeben Sie die Modell- ID als Anfangswert, nicht das Objekt selbst oder dessen Namen oder etwas anderes. Dann ist es so einfach wie:Alternativ kann das
initial
Argument anstelle einer zusätzlichen Zeile ignoriert werden mit:quelle
GET
Anforderung festlegen und in einer Ansicht festlegen müssen.Dave - haben Sie Glück, eine Lösung für das Browserproblem zu finden? Gibt es eine Möglichkeit, eine Aktualisierung zu erzwingen?
Versuchen Sie beim Initialisieren des Formulars Folgendes für das ursprüngliche Problem:
quelle
Instances should always modify self.fields; they should not modify self.base_fields.
Um sicherzugehen, muss ich sehen, wie Sie das Formular rendern. Der Anfangswert wird nur in ungebundener Form verwendet, wenn er gebunden ist und ein Wert für dieses Feld nicht enthalten ist, wird nichts ausgewählt.
quelle
Versuchen Sie dies, es funktioniert für mich, ich habe dies in models.py hinzugefügt
quelle
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'