2017-04-11 2 views
0

Ich habe ein Formular, das in zwei verschiedenen Vorlage angezeigt werden muss. Eine ist die Hauptseite, d.h. auf der Einladungsseite, um nur das Einladungsformular anzuzeigen, und eine andere auf der Homepage. Wenn ein Formular von der Homepage aus ausgefüllt wird, sollte der Fehler von der Hauptseite dieses Formulars, z. B. Einladungsvorlage, angezeigt werden.dasselbe Formular in mehreren Vorlage zeigen

Ich konnte das Formular in der Einladungsschablone zeigen und Fehleranzeige funktioniert tadellos entweder aber wenn ich das Formular von der homepage fülle, erhalte ich immer "dieses Feld ist erforderlich" Fehler, selbst wenn ich den richtigen Wert überlasse.

Hier ist mein Code

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) 

ich diese meine Indexansicht geändert. Wenn ich den richtigen Wert fülle, werden die Daten gespeichert, aber wenn ein Fehler vorliegt, wird nicht zur Seite/invitation/request weitergeleitet, um diesen Fehler anzuzeigen. Wenn ich HttpResponseRedirect unter der else-Bedingung von form.is_invalid() verwende, werde ich sofort, wenn ich die Homepage betrete, auf die Seite/invitation/request umgeleitet.

+0

Sie umgeleitet, weil: 1. ** form.is_valid() ** Falsch ist, da sie zum ersten gemacht wird time, 2. ** Wenn created ** false ist, endet es in der else-Anweisung, die Sie zu/invitiations/request/umleitet. – dentemm

+0

Was muss ich dann bitte tun? – milan

Antwort

0

Sie nicht validieren und das Formular in Ihrer Home-Ansicht zu speichern, so dass im Grunde bleibt es leer

+0

Bedeutet das, dass ich denselben Code (requestInvitation-Ansicht) auch in der Home-Ansicht platzieren muss? – milan

+1

Ja, der Code innerhalb von ** form.is_valid() ** sollte für die Home-Ansicht wiederholt werden (oder leicht angepasst werden, je nachdem, was Sie erreichen möchten). Zumindest müssen Sie überprüfen, ob das Formular gültig ist, und dann speichern, wenn es gültig ist. Wenn nicht, dann wiederhole es mit Fehlern. – dentemm

+0

Im Formular Action-Attribut, sollte ich die URL von/Index übergeben, oder? – milan

Verwandte Themen