阻止django消息立即显示错误消息和成功消息

时间:2016-04-15 14:37:16

标签: django forms

目标:我正在构建一个简单的博客应用程序。在我的帖子视图中,有一个名为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>

1 个答案:

答案 0 :(得分:0)

默认情况下,表单无效。所以你的'elif&#39;条件在这里工作,每次提交表单时都会显示错误消息。但如果表单成功提交,则不会出现任何错误,因此检查form.errors实际上会有效。

FIX:
变化

elif(request.method == 'POST'):

elif form.errors:

现在flash消息应该在正确的条件下显示