目标:我正在构建一个简单的博客应用程序。在我的帖子视图中,有一个名为post_create的视图,假设在没有帖子请求的情况下首先显示该表单。在表单提交上,将发布请求发送到同一视图,然后条件检查表单是否有效。如果表单数据有效,则重定向将发送到具有成功消息的帖子。如果重定向无效,则会将请求发送回origianl post_create视图,并显示错误消息。
问题:当我第一次通过提交缺失数据测试表单时,我会被定向回原始表单页面和错误消息,这很好。但后来我用所有正确的数据填写表格,我被重定向到邮政我同时看到错误信息和成功消息。我应该看到成功的消息。
查看代码:
def post_create(request):
form = PostForm(request.POST or None)
if form.is_valid() and request.method == 'POST':
instance = form.save(commit=False)
instance.save()
# message success
## TODO GET MESSAGES TO NOT DISPLAY SUCCESS AND FAILURE
messages.add_message(request,messages.SUCCESS, "Logged in Successfully")
return HttpResponseRedirect(instance.get_absolute_url())
elif(request.method == 'POST'):
messages.error(request, "Not Successfully Created")
context = {
"form":form,
}
return render(request,"post_form.html",context)
保存帖子的模板:
<!-- DOCTYPE html -->
<html>
<body>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
<h1>{{ post.title}}</h1>
<div>
{{post.content}}</br>
{{post.timestamp}}</br>
{{post.id}}</br>
</div>
</body>
</html>
答案 0 :(得分:0)
默认情况下,表单无效。所以你的'elif&#39;条件在这里工作,每次提交表单时都会显示错误消息。但如果表单成功提交,则不会出现任何错误,因此检查form.errors
实际上会有效。
FIX:
变化
elif(request.method == 'POST'):
到
elif form.errors:
现在flash消息应该在正确的条件下显示