2010-03-09 46 views
4

如果我想用我的formset 其他做什么比立即保存它?Django:如何迭代formset并访问已清理的数据?

我该怎么做?

 for form in vehicles_formset.forms: 
      listing.id = None 
      listing.vehicle_year = form.cleaned_data['year'] 
      listing.vehicle_make = form.cleaned_data['make'] 
      listing.vehicle_model = form.cleaned_data['model'] 
      listing.vin = form.cleaned_data['vin'] 
      listing.vehicle_runs = form.cleaned_data['runs'] 
      listing.vehicle_convertible = form.cleaned_data['convertible'] 
      listing.vehicle_modified = form.cleaned_data['modified'] 
      listing.save() 

(因此创建多个列表)显然cleaned_data不存在。 data字典中有很多东西,比如form-0-year,但对我来说这很没用。

回答

3

您是否在上面的代码段之前调用vehicles_formset.is_valid()

此外,在您的表单集使用ModelForm将允许您通过简单地做listing = form.save(commit=False)

+0

哦,我的上帝......优秀的忍者调试先生!我确实忘了调用'is_valid()'。忘记了那添加了'cleared_data'信息。车辆表格只是列表模型的一个子集,所以我不认为我可以使用form.save()。基本上有一堆列表数据,它们都具有我想要复制的共同数据,然后只需从车辆表单中获取其他数据。 – mpen 2010-03-09 05:09:22

1

只是为了进一步以往的评论来从形式上市的情况下,一旦formset.is_valid()叫,你也可以做save(commit=False)直接formset。这将返回一个实例列表,然后可以单独修改,然后保存:

forms = formset.save(commit=False) 
for form in forms: 
    form.some_field_name = new_value 
    form.save()