Django 代码仅在调试模式下有效

1 投票
2 回答
1062 浏览
提问于 2025-04-16 15:34

我对这个问题感到很困惑。这段在views.py里的代码能正常工作,但只有在我用Pycharm调试的时候。如果我直接用runserver命令启动,就会出现500错误。

views.py:

def add_post(request):
if request.method == 'POST':
    form = PostForm(request.POST)
    cd = form.cleaned_data
    if form.is_valid():
        print "valid"
        post = Post(nickname=cd['nickname'], body=cd['body'], category=cd['category'])
        post.save()

        return HttpResponse("success")

return HttpResponseServerError("fail")

在Chrome检查器中看到的错误

     <th>Exception Value:</th>
  <td><pre>&#39;PostForm&#39; object has no attribute &#39;cleaned_data&#39;</pre></td>

没有属性cleaned_data?这为什么会这样呢...?

2 个回答

0

在Django中,表单的cleaned_data属性在你调用is_valid()方法之前是无法访问的。

form = PostForm(request.POST)

if form.is_valid():
    cd = form.cleaned_data
    ...
4

在你对一个表单调用 is_valid() 方法之后,cleaned_data 这个属性就可以用了。你应该把 cd = form.cleaned_data 这行代码放到 if 语句下面。

撰写回答