表单对象没有属性“cleaned_data”

Posted

技术标签:

【中文标题】表单对象没有属性“cleaned_data”【英文标题】:form object has no attribute 'cleaned_data' 【发布时间】:2011-12-26 19:32:32 【问题描述】:

我正在尝试使用 django 文档生成表单。我不断收到错误:

'TestForm' object has no attribute 'cleaned_data'

即使 form.is_validTrue(它会打印我的代码的“表单有效”行)。以下是我的代码的相关部分。

urls.py

url(r'^test/',views.test),

forms.py

from django import forms
class TestForm(forms.Form):
    name = forms.CharField()

views.py

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)
        if form.is_valid:
            print 'form is valid'
            print form.cleaned_data                       
        else:
            print 'form not valid'
    else:
         form = TestForm()

    return render_to_response('User/Test.html','form': form,context_instance=RequestContext(request))

Test.html

<form action="" method="post">% csrf_token %
        <table>
             form.as_table 
        </table>
        <input type="submit" value="Submit">
    </form>

【问题讨论】:

【参考方案1】:

您没有触发表单的清理和验证,这是通过调用is_valid() 方法完成的(注意括号 () ),这就是您没有清理数据的原因。

更正:

if request.method == 'POST':
    form = TestForm(request.POST)
    if form.is_valid():
        print 'form is valid'
        print form.cleaned_data
    ...

【讨论】:

,感谢您的帖子,我已将其更正为 is_valid(),现在如果 form.is_valid 为 False,则进入代码的 else 部分。 +1 表示 () 捕获。我有同样的问题,棘手的部分是,如果我设置一个断点并单步执行代码,它会起作用,但否则就不会起作用。即使没有 is_valid() 调用,猜测调试器也会强制表单对象完全填充。 这是一个奇怪的系统。我想使用清理后的数据,但使用我自己的验证(因为它需要条件验证),所以我不得不调用 is_valid() 函数,然后不使用它返回的内容。

以上是关于表单对象没有属性“cleaned_data”的主要内容,如果未能解决你的问题,请参考以下文章

图像在request.POST中发送,但在form.cleaned_data中清理

Django_Form表单补充

Django formwizard - 无法从步骤 1 到步骤 2 获取数据

Form表单

需要 Django 表单集

Django AttributeError:表单对象没有属性“_errors”