1

以下代码基于模型创建表单,Post. 我面临的问题是表单永远不会验证,并且如果我删除检查,数据不会验证的ValueError 。if post_form.is_valid():

但是,如果我保留如下所示的代码,即保留if post_form.is_valid():检查,那么它总是失败并else执行该块。

我试图在我的模型中保存用户,这是 Django Auth 的 ForeignKey,结果我什至无法克服这个 vlaidation 错误。

任何帮助将不胜感激。谢谢。

#----------------------------Model-------------------------------------- 
class Post (models.Model): 
    name = models.CharField(max_length=1000, help_text="required, name of the post") 
    user = models.ForeignKey(User, unique=False, help_text="user this post belongs to") 

    def __unicode__(self): 
        return self.name 

class PostForm(ModelForm): 
    class Meta: 
            model = Post 
#----------------------------./Model--------------------------------------

#----------------------------View-------------------------------------- 
@login_required 
def create_post (request): 
    if request.method == 'POST': 
        post_form = PostForm(request.POST) 
        if post_form.is_valid(): 
            post.save() 
            return render_to_response('home.html') 
        else: 
            return HttpResponse('not working') 
    else: 
        post_form = PostForm() 
        return render_to_response('create.html', {'post_form':post_form }) 
#----------------------------./View--------------------------------------

#----------------------------./Template--------------------------------------
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>home</title>
</head>
<body>
<form method="POST" action='.'>{% csrf_token %}
    <p>{{post_form.name.label_tag}}</p>
    <p>{{post_form.name}}</p>
        <p><input type="submit" value="Submit"/></p>
</form>
</body>
</html>
#----------------------------./Template--------------------------------------
4

2 回答 2

3

在您的另一篇文章中,您试图自动插入user字段,这可能意味着您没有user在模板中显示字段。

如果您仍然打算插入用户,请排除它。

class PostForm(ModelForm): 
    class Meta: 
            model = Post 
            exclude = ('user',) # exclude this

if request.method == 'POST': 
    post_form = PostForm(request.POST) 
    if post_form.is_valid(): 
        post = post.save(commit=False) 
        post.user = request.user
        post.save()  # now post has a user, and can actually be saved.
        return render_to_response('home.html') 
于 2011-03-20T19:34:35.777 回答
2

它显示无效,因为表单无效。大概是提交表格的人没有填写必填字段。如果你显示的值form.errors你会明白为什么。

或者,虽然我们不得不猜测,因为您没有显示模板,但您没有在模板本身中包含所有必填字段,因此表单永远不会有效。

删除第一个else子句及其 HttpResponse。然后视图将默认再次显示表单,并带有错误。

于 2011-03-20T19:31:24.313 回答