据我所知,Django不允许您在从模型创建的单个表单中保存不完整的字段,除非您这样做:
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(commit = False)?
答案 0 :(得分:1)
尝试使用setattr
,因为您不知道该字段的名称。
setattr(tmpform, field, form.cleaned_data[name])
答案 1 :(得分: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()