提交表单未更改时,Django 表单集 clean_data 为空

2024-06-08

关于Django 1.4和表单集,我遇到了一个奇怪的问题:当提交的数据未更改时,表单集的cleaned_data字段为空,即使表单集本身通过了验证。

这是一个例子:

形式.py:

class NameForm(forms.Form):
    name = forms.CharField(required=False, initial='Foo')

视图.py:

def welcome(request):

    Formset = formset_factory(NameForm, extra=1)
    if request.method == 'POST':
        formset = Formset(request.POST)
        print '1.Formset is valid?', formset.is_valid()
        print '2.Formset', formset
        print '3.Formset cleaned_data', formset.cleaned_data
    else:
        formset = Formset()
    return render_to_response('template.html', locals())

虽然formset是有效的,并且它实际上包含数据,第 3 行打印一个空字典的列表,除非我实际上更改了该字段中的初始值。

这对我来说似乎很奇怪,但我可能做错了什么。有什么帮助吗?


表单集呈现一堆表单以及几个包含表单最大数量等信息的隐藏输入字段。因此,正确发布的表单集始终包含数据。

并且,CharField 中的初始“Foo”name这就是 formset 字典为空的原因。什么时候empty_permitted表单的 属性 设置为 True,并且表单的所有项都等于其初始值,Django 会将表单视为空并将其 clean_data 设置为空字典。这empty_permitted默认为 False,对于额外的表单,formset 会将其设置为 True。因此,在您单击提交而不编辑值“Foo”后,表单实例被视为空,因此包装表单的表单集获得了空的cleaned_data。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提交表单未更改时,Django 表单集 clean_data 为空 的相关文章

随机推荐