使用 django formset 编辑时保留所有数据
retain all data when editing using a django formset
假设我有一个模型 FooBar 包含两个字段 Foo 和 Bar。然后,如果我使用模型形式只编辑现有记录的 Foo 字段,我可以使用实例保留 Bar 数据,即
foobar = FooBar.objects.get(...)
foobar_form = FooBarForm(request.post, instance=foobar)
对于表单集,这相当于什么?到目前为止,我已经尝试过 Instance,Django 告诉我它对于表单集不存在,还有 initial,我用它来填充 GET 请求中的表单集,
foobar = FooBar.objects.filter(...)
foobar_formset = FooBarFormSet(request.post, initial = foobar.values())
排除初始参数会使 has_changed() 始终 return 为真,而包含初始参数会使 has_changed() 反映表单的实际状态 POST数据。这向我表明 bar 字段数据是在某处获取的,但是当我遍历 foobar_formset 并执行
for foobar_form in foobar_formset:
foobar_form.save()
我从调试器中收到一条错误消息,指出 "Bar" 列中的空值违反了非空约束。详细信息:失败的行包含 ('foo_value', null).
指定 queryset
:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset
Trying to pass a QuerySet as initial data to a formset
假设我有一个模型 FooBar 包含两个字段 Foo 和 Bar。然后,如果我使用模型形式只编辑现有记录的 Foo 字段,我可以使用实例保留 Bar 数据,即
foobar = FooBar.objects.get(...)
foobar_form = FooBarForm(request.post, instance=foobar)
对于表单集,这相当于什么?到目前为止,我已经尝试过 Instance,Django 告诉我它对于表单集不存在,还有 initial,我用它来填充 GET 请求中的表单集,
foobar = FooBar.objects.filter(...)
foobar_formset = FooBarFormSet(request.post, initial = foobar.values())
排除初始参数会使 has_changed() 始终 return 为真,而包含初始参数会使 has_changed() 反映表单的实际状态 POST数据。这向我表明 bar 字段数据是在某处获取的,但是当我遍历 foobar_formset 并执行
for foobar_form in foobar_formset:
foobar_form.save()
我从调试器中收到一条错误消息,指出 "Bar" 列中的空值违反了非空约束。详细信息:失败的行包含 ('foo_value', null).
指定 queryset
:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset
Trying to pass a QuerySet as initial data to a formset