2009-07-28 11 views
2

Ich verstehe, dass Django läßt Sie nicht ein unvollständigen Felder in einer einzigen Form von einem Modell erstellt sparen, wenn Sie dies tun:Modell Formset mit form.save speichern (commit = False) und mehreren Feldnamen

tmpform = form.save(commit=False) 
tmpform.foo = form.cleaned_data['foo'] 
tmpform.save() 

Also ich möchte so etwas mit Formularen in einem Formset tun - ich versuche, durch alle Felder für jedes Formular im Formset zu durchlaufen. Aber das Problem ist, dass ich bin mir nicht sicher, wie genau durchlaufen Sie alle Felder jedes Formulars im Formularsatz. Ich versuchte dies:

for form in formset.forms: 
    for name, field in form.fields.items(): 
    tmpform = form.save(commit=False) 
    tmpform.field[name] = form.cleaned_data[name] # doesn't work, I get an error 
    tmpform.save() 

Aber ich nur die Fehlermeldung:

'FooForm' object has no attribute 'field'. 

Meine Frage ist: Wie verwende ich form.save (Commit = False) richtig gegeben, dass ich mehrere Felder in ein Formular mit verschiedenen Feldnamen?

Antwort

1

Versuchen Sie setattr, da Sie den Namen des Feldes nicht kennen.

setattr(tmpform, field, form.cleaned_data[name]) 
+0

Danke für mich in die richtige Richtung! – Paul

+0

Gern geschehen. – seth

0

Nach Hantieren glaube ich die Syntax gefunden, die für meine Zwecke zu funktionieren scheint:

if formset.is_valid(): 
    for form in formset.forms: 
    tmpform = form.save(commit=False) 
    for field in form: 
     if not field.form.is_bound: 
      data = field.form.initial.get(field.name, 
           field.field.initial) 
      if callable(data): 
      data = data() 
     else: 
      data = field.data 

     setattr(tmpform, field.name, data) 
     print "fieldname: %s - value: %s" %(field.name,data) 

    tmpform.save() 
Verwandte Themen