Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单集在提交表单未更改时已清除\u数据为空_Python_Django_Formset - Fatal编程技术网

Python Django表单集在提交表单未更改时已清除\u数据为空

Python Django表单集在提交表单未更改时已清除\u数据为空,python,django,formset,Python,Django,Formset,关于Django 1.4和表单集,我遇到了一个奇怪的问题:当提交的数据保持不变时,表单集的cleaned_数据字段为空,即使表单集本身通过了验证 以下是一个例子: forms.py: class NameForm(forms.Form): name = forms.CharField(required=False, initial='Foo') def welcome(request): Formset = formset_factory(NameForm, extra=1)

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

以下是一个例子:

forms.py:

class NameForm(forms.Form):
    name = forms.CharField(required=False, initial='Foo')
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())
视图。py:

class NameForm(forms.Form):
    name = forms.CharField(required=False, initial='Foo')
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
name
中的首字母“Foo”是formset得到空字典的原因。当表单的
empty_allowed
设置为True,且表单的所有项都等于其初始值时,Django会将该表单视为空,并将其清理后的数据设置为空dict。
empty_allowed
默认为False,对于其他表单,formset会将其设置为True。因此,在您单击submit w/o编辑值“Foo”后,表单实例被视为空的,因此包装表单的表单集获得了一个空的已清理数据。

这发生在我身上@okm是正确的,但从他的回答中不清楚如何修复它。有关解决方案,请参阅:

class MyModelFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        super(MyModelFormSet, self).__init__(*args, **kwargs)
        for form in self.forms:
            form.empty_permitted = False

你能给我看一下你的模板代码吗?我费了好大劲才帮我解决了一个坏毛病——谢谢!感谢您提供代码–非常有用。早些时候遇到这个问题,非常气愤!