2017-04-11 3 views
0

私は2つの異なるテンプレートで表示する必要があるフォームを持っています。 1つはメインページで、招待状と招待状はホームページに表示されます。フォームがホームページから入力されたときにエラーが発生した場合は、そのフォームのメインページ、つまり招待テンプレートからエラーが表示されます。複数のテンプレートで同じフォームを表示

私は招待状のフォームを表示することができましたが、エラー表示も完璧に機能していますが、私はホームページからフォームを記入するといつもこのフィールドは必要です私は正しい値を渡します。

は、ここで私はこれまで私のインデックスビューを変更

def index(request): 
    form = InviteForm(request.POST or None) 
    if form.is_valid(): 
     join = form.save(commit=False) 
     print ('noin', join) 
     email = form.cleaned_data.get('email') 
     already_join, created = Invitation.objects.get_or_create(email=email) 
     print ('already_join', already_join, created) 
     if created: 
      already_join.invite_code = get_invite_code() 
      already_join.save() 
      send_request_received_email.delay(email,already_join.email_tracker) 
      messages.success(request, "Thank you for your interest") 
      return HttpResponseRedirect('/') 
     else: 
      return HttpResponseRedirect('/invitations/request') 
    # return HttpResponseRedirect('/invitations/request') 
    context = {"form": form} 
    return render(request, 'index.html', context) 

私のコード

def requestInvitation(request): 
    form = InviteForm(request.POST or None) 
    if form.is_valid(): 
     join = form.save(commit=False) 
     email = form.cleaned_data.get('email') 
     already_join, created = Invitation.objects.get_or_create(email=email) 
     if created: 
      already_join.invite_code = get_invite_code() 
      already_join.save() 
      send_request_received_email.delay(email,already_join.email_tracker) 
      messages.success(request, "Thank you for your interest.") 
     return HttpResponseRedirect('/') 
    context = {"form": form} 
    return render(request, 'invitation/invitation.html', context) 


def index(request): 
    form = InviteForm(request.POST or None) 
    context = {"form": form} 
    if not request.user.is_authenticated(): 
     return render(request, "home.html", context) 
    else: 
     return render(request, "home.html", context) 


url(r'^request/$', requestInvitation, name='request-invitation'), 

UPDATEです。正しい値を入力すればデータは保存されますが、エラーがある場合は/ invitation/requestページにリダイレクトされずにそのエラーが表示されます。 form.is_invalid()のelse条件でHttpResponseRedirectを使用すると、ホームページに入ると、即座に/ invitation/requestページにリダイレクトされます。

+0

空のままで、あなたのホームビューでフォームを検証して保存されていません。それが最初のためにレンダリングされるので、**)(1. ** form.is_validはFalseです**作成された場合**はFalseなので、/ invitiations/request /にリダイレクトされるelseステートメントで終了します。 – dentemm

+0

どうしたらいいですか? – milan

答えて

0

あなたはとても基本的にそれがためにあなたがリダイレクトされている

+0

これは、同じコード(requestInvitationビュー)をホームビューに配置する必要があることを意味しますか? – milan

+1

はい、** form.is_valid()**内のコードは、ホームビューに対して繰り返す必要があります(または達成したいことに応じて少し調整します)。少なくとも、フォームが有効であることを確認し、有効なときに保存する必要があります。そうでない場合は、エラーで再レンダリングしてください。 – dentemm

+0

フォームアクション属性では、/ indexのURLを渡す必要がありますか? – milan

関連する問題