2016-04-15 13 views
1

目的:私は簡単なブログアプリケーションを構築しています。私の投稿のビュー内には、post_createという1つのビューがあり、投稿要求がない場合に最初にフォームを表示すると仮定しています。フォーム送信時には、ポストリクエストが同じビューに送信され、条件付きでフォームが有効かどうかがチェックされます。フォームデータが有効な場合、リダイレクトは成功メッセージとともにポストに送信されます。リダイレクトが有効でない場合、要求はエラーメッセージとともにorigianl post_createビューに返されます。djangoメッセージがエラーメッセージと成功メッセージを同時に表示しないようにします。

問題:最初に不足しているデータを送信してフォームをテストすると、元のフォームページとエラーメッセージが表示されます。しかし、私はすべての正しいデータでフォームを記入し、私はPostにリダイレクトされます。エラーメッセージと成功メッセージが同時に表示されます。私は成功のメッセージを見なければならない。

VIEWのCODE:保存されたポストの

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) 

TEMPLATE:

<!-- 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が実際に動作するかどうかをチェックします。

FIX:今すぐフラッシュメッセージが正しい条件

の下に表示されなければならない

elif form.errors: 

から
変更

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

関連する問題