2009-07-28 50 views
2

據我所知,Django會不會讓你保存不完整的字段從模型中創建一個單一的形式,除非你這樣做:模型表單集與form.save保存(提交= FALSE)和多個字段名

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

所以我想用formset中的表單來做這種事情 - 我試圖遍歷formset中每個表單的所有字段。但問題是我不確定如何迭代formset中每個表單的所有字段。我嘗試這樣做:

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() 

但我只收到錯誤消息:

'FooForm' object has no attribute 'field'. 

我的問題是:我怎麼使用form.save(提交= FALSE)適當考慮到我在多個領域一個具有不同字段名稱的表單?

回答

1

嘗試使用setattr,因爲您不知道該字段的名稱。

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

謝謝你指着我在正確的方向! – Paul 2009-07-29 02:40:25

0

摸索之後,我想我發現,似乎我的目的,工作的語法:

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()