2017-04-11 56 views
0

我有一個表單需要在兩個不同的模板中顯示。一個是主頁,即在邀請頁面上顯示只有邀請表格和另一個在主頁上。當從主頁填寫表格時,如果有錯誤,應從該表格的主頁面(即邀請模板)顯示錯誤。在多個模板中顯示相同的表格

我可以在邀請模板中顯示錶單並且錯誤顯示工作正常,但是如果我從主頁填寫表單,即使我傳遞正確的值,我總是會得到'該字段是必需的'錯誤。

這裏是我的代碼

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

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) 

我改變了我的索引視圖來此。如果我填寫正確的值,數據將被保存,但如果有錯誤,它不會重定向到/邀請/請求頁面以顯示該錯誤。如果我在form.is_invalid()的else條件中使用HttpResponseRedirect,那麼當我進入主頁時,我會立即重定向到/ invitation/request頁面。

+0

您將被重定向,因爲:1 ** form.is_valid()**是假,因爲它呈現爲先時間,2。**如果創建**是假的,所以最終在else語句中重定向到/ invitiations/request /。 – dentemm

+0

請問我需要做什麼? – milan

回答

0

您還沒有驗證和保存在您的主頁視圖的形式,所以基本上它仍然是空

+0

這是否意味着我必須在主視圖中放置相同的代碼(requestInvitation視圖)? – milan

+1

是的,** form.is_valid()**中的代碼應該爲主視圖重複使用(或根據想要實現的略微調整)。至少你需要檢查表單是否有效,然後在有效時保存。如果不是這樣,只需要重新出現錯誤。 – dentemm

+0

在form action屬性中,我應該傳遞/ index的url,對吧? – milan