提交表单不变时,Django表单集cleaned_data为空

pav*_*nis 4 python django formset

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

这是一个例子:

forms.py:

class NameForm(forms.Form):
    name = forms.CharField(required=False, initial='Foo')
Run Code Online (Sandbox Code Playgroud)

views.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())
Run Code Online (Sandbox Code Playgroud)

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

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

okm*_*okm 7

表单集呈现一堆表单以及几个包含信息(例如表单的最大数量)的隐藏输入字段。因此,正确过帐的表单集始终包含数据。

而且,CharField内的初始“ Foo” name是表单集为空字典的原因。当empty_permitted某表单的设置为True,并且该表单的所有项目均等于其初始值时,Django会将表单视为空并将其cleaned_data设置为空dict。该empty_permitted默认为false,表单集将它设置为True额外的形式。因此,在单击不编辑值'Foo'的提交之后,该表单实例被视为空,因此包装该表单的表单集得到了一个空的cleaned_data。