Django: erstellen von HTML-input-array mit einer django-Formular
Ich bin versucht, zu automatisieren, die Schaffung von so etwas wie dieses:
<input type='text' name='asdf[]' />
<input type='text' name='asdf[]' />
<input type='text' name='asdf[]' />
Durch das Radfahren durch eine Reihe in der form. Ich habe versucht, Dinge wie diese, zusammen mit einigen anderen Variationen:
# in a model class
for i in range(1, prim+1):
self.fields['asdf'] = forms.CharField(label=i)
# in the template
<form action='#' method='post'>
{{form.as_p}}
</form>
Aber ich habe nicht hatte kein Glück, obwohl.
Wie kann ich das automatisieren eine Reihe von Eingängen?
* * * * edit
Um zu klären, schließlich muss ich in der Lage sein, um Zugriff auf die Felder in der Vorlage wie diese:
{% for input in form.fields.asdf %}
{{input}}
{% endfor %}
Welche dann hoffentlich bekomme ich die original-input-Liste (siehe oben...
- Ihre Schleife ist nur die Schaffung eines neuen CharField mit einem ungültigen Etikett (nicht eine ganze Zahl sein) und überschreiben sich selbst.Feld['asdf'] . Ich bin mir nicht sicher, was es ist, dass Sie zu tun versuchen. Meinst du so ähnlich wie mit den Wahlen-Attribut?
- Ja, das bestimmten version einfach überschrieben. Ich hatte mehr komplizierten code vor, der versucht wurde, Listen zu erstellen und/oder Wörterbücher, aber ich konnte nicht Sie zu arbeiten entweder.
- Vielleicht könnten Sie Ihr label "asdf" oder so etwas, dann eine Schleife durch alle Felder ausgeben, wenn
{% ifequal field.label 'asdf' %}
entspricht, und verwenden Sie dannforloop.counter
1, 2, 3 usw. Ich aktualisiert meine Antwort unten. - Das funktioniert vielleicht ganz gut
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jacob Kaplan-Moss (co-Autor von " Django) vor kurzem veröffentlicht einen großen Artikel für das handling von dynamischen Formen, die sollte dein problem lösen in einer bevorzugten Art und Weise:
http://jacobian.org/writing/dynamic-form-generation/
Er mit der gleichen Methode, dass Felix schon sagt, es lohnt sich aber das Lesen der gesamten Artikel, um zu erhalten ein besseres Verständnis über das Konzept.
Mithilfe der
asdf[]
Technik ist schlampig, weil Sie dann zu tun haben mit der Bestellung. Es ist auch nicht die gängige Praxis.Edit:
Um mit der situation umzugehen, wo Sie brauchen, um zu erkennen, wenn Sie auf diese dynamischen Felder:
Sollte es mehr werden wie z.B.:
Aber es ist sehr davon abhängig, was Sie erreichen wollen.
Wie es aussieht kann ich tun, was ich tun müssen, um durch das brechen der form in mehreren formsets...
http://docs.djangoproject.com/en/dev/topics/forms/formsets/#topics-forms-formsets
Dann, ich sollte in der Lage sein, um Zugriff auf jedem Formularsatz einzeln aus der Vorlage, Verpackung, alle von Ihnen in einer