使用django formset进行编辑时保留所有数据

时间:2017-10-28 11:36:30

标签: django formset

假设我的模型 FooBar 包含两个字段 Foo Bar 。然后,如果我使用modelform只编辑现有记录的 Foo 字段,我可以使用实例保留 Bar 数据,即

foobar = FooBar.objects.get(...)
foobar_form = FooBarForm(request.post, instance=foobar)

对于表单集,这相当于什么?到目前为止,我已经尝试了实例,Django告诉我,它不存在于formset和initial,我用它来填充GET请求中的formset,

foobar = FooBar.objects.filter(...)
foobar_formset = FooBarFormSet(request.post, initial = foobar.values())

排除初始参数使得has_changed()始终返回True,而包含初始参数使得has_changed()反映了表单POST数据的实际状态。这告诉我, bar 字段数据在某处被拾取,但是当我迭代foobar_formset并执行

for foobar_form in foobar_formset:
    foobar_form.save()

我从调试器中得到一个错误,在列#34; Bar"中说空值违反非空约束。详细信息:失败的行包含(' foo_value',null)。