以下代码基于模型Post
创建表单。我面临的问题是,如果我删除if post_form.is_valid():
支票,表单永远不会验证并提供 ValueError 数据无法验证。
但是,如果我保持代码如下所示,即我保持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--------------------------------------
答案 0 :(得分: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')
答案 1 :(得分:2)
它显示无效,因为表单无效。据推测,提交表格的人没有填写必填字段。如果您显示form.errors
的值,您将看到原因。
或者,尽管我们必须猜测,因为您没有显示模板,但您没有在模板中包含所有必填字段,因此表单永远不会有效。
使用其HttpResponse删除第一个else
子句。然后,该视图将默认再次显示该表单,并显示错误。