2009-07-15 7 views
0

Ich habe ein Django-Formular, das eine andere Anzahl von Feldern basierend auf dem Jahr/Monat verwendet. So schaffe ich die Felder in der Form wie folgt aus:Erhalten Sie POST-Daten von einem komplexen Django-Formular?

for entry in entry_list: 
    self.fields[entry] = forms.DecimalField([stuffhere]) 

aber jetzt weiß ich nicht, wie die vorgelegten Daten aus dem Formular zu erhalten.

Normalerweise würde ich so etwas wie:

form.cleaned_data["fieldname"] 

aber ich weiß nicht, was die Namen der Felder sind. Der Debug-Bildschirm zeigt meine POST-Daten einfach als "Entry Object" mit dem Wert "u '" an. Der Aufruf von POST.lists() zeigt nichts an.

Ich bin sicher, dass ich etwas offensichtliches verpasse, aber ich habe auf diesem für ein paar Tage zu viele festgefahren. Gibt es einen besseren Weg, dies zu tun? Sind alle Daten im Anforderungsobjekt vorhanden, aber ich weiß einfach nicht, wie ich sie verwenden soll?

Hier ist der Code für das Modell/form/Blick: http://pastebin.com/f28d92c0e

Vielen Dank!

EDIT:

Ich habe unten beide Vorschläge ausprobiert. Die Verwendung von Formsets war definitiv einfacher und schöner.

Antwort

5

Ich denke, Sie könnten besser sein mit formsets hier. Sie sind genau auf das ausgerichtet, was Sie scheinbar zu tun versuchen - mit einer variablen Anzahl von Elementen innerhalb eines Formulars.

+0

Formsets sieht genau das aus, was ich brauche, danke. – mdashx

0

In dieser Zeile:

self.fields [Eintrag] = forms.DecimalField (max_digits = 4, decimal_places = 1, label = nice_label)

Eintrag ist ein Modellinstanz. Felder werden jedoch durch Feldnamen (Strings) kodiert. Versuchen Sie so etwas wie:

self.fields [entry.entry_name] = forms.Decimal (...)

(Ersatz geeignet für "Eintragsname").

+0

Danke. Das habe ich erst kurz vor meiner Abreise zur Arbeit bemerkt. Ich werde Formsets ausprobieren, aber danke, dass ihr mir geholfen habt, den Fehler in meiner Form zu finden, hoffentlich werden meine zukünftigen Formulare besser funktionieren. – mdashx

+0

Das ist eigentlich die Art und Weise, wie ich es gerade repariere, bis jetzt funktioniert alles wunderbar. Vielen Dank! – mdashx

+0

Froh, dass es klappt. :-) – ars