2016-04-15 156 views
1

目標:我正在構建一個簡單的博客應用程序。在我的帖子視圖中,有一個視圖叫做post_create,假設在沒有帖子請求時首先顯示錶單。在表單提交後,請求發送到相同的視圖和條件,然後檢查表單是否有效。如果表單數據有效,則重定向將通過成功消息發送到帖子。如果重定向無效,請求將返回到origianl post_create視圖並顯示錯誤消息。阻止Django消息一次顯示錯誤消息和成功消息

問題:當我第一次通過提交缺失數據測試表單時,我回到原始表單頁面和錯誤信息,這很好。但隨後我填寫了所有正確的數據,並將其重定向到了Post,我同時看到錯誤消息和成功消息。我應該看到成功的消息。

視圖代碼:

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

形式是在默認情況下無效。因此,您的'elif'條件在這裏不起作用,每次提交表單時都會顯示錯誤消息。但是,如果表格成功提交,則不會有任何錯誤,因此檢查form.errors實際上將起作用。

THE FIX:
變化

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

elif form.errors: 

現在閃光消息應的正確的條件下顯示