2016-07-30 5 views
0

Ich habe eine Update-Ansicht für die Aktualisierung von Benutzerprofilinformationen. Auf dieser Seite habe ich ein weiteres Formular für die Passwortänderung hinzugefügt, das separat funktioniert. Nun, was ich getan habe ist, dass ich überprüft habe, ob das Passwort geändert wurde Formular eingereicht und die notwendigen Maßnahmen ergriffen.
Was ich will ist, dass, wenn der Benutzer irgendwelche Daten auf dem Profil-Update-Formular geändert und das Passwort ändern Formular mit Fehlern eingereicht, dann sollte ich die Fehler auf dem Passwort-Formular und die geänderten Daten auf dem Benutzer-Update-Formular sehen. Wie kann das gemacht werden?
P.S: Ich dachte, dass ich vielleicht über AJAX-Anfrage damit umgehen kann, wo ich beide Formulardaten durch Serialisierung senden kann. Aber ich möchte, dass es ohne AJAX-Anruf funktioniert.Django behandeln mehrere Formulare in der klassenbasierten Ansicht

Antwort

0

"Was ich will ist, dass, wenn der Benutzer irgendwelche Daten auf dem Profil-Update-Formular geändert und das Passwort ändert Formular mit Fehlern, dann sollte ich die Fehler auf dem Passwort-Formular und die geänderten Daten auf dem Benutzer-Update sehen . Form "

Eine Möglichkeit, mit einem solchen Problem zu tun ist, um beide Formen senden zusammen:

<form method="post"> 
    {% csrf_token %} 

    <h2>Your User Update Form</h2> 
    {% user_update_form %} 

    <h2>Your Password Change Form</h2> 
    {% password_change_form %} 
</form> 

und dann in der Ansicht:

def get(self, request, *args, **kwargs): 
     # initialize both forms with prefixes 
     user_update_form = UserUpdateForm(prefix='user_update') 
     password_change_form = UserPasswordForm(prefix='password_change') 
     return self._render_form(user_update_form, password_change_form) 

    def post(self, request, *args, **kwargs): 
     # read forms from POST 
     user_update_form = UserUpdateForm(request.POST, prefix='user_update') 
     password_change_form = UserPasswordForm(request.POST, prefix='password_change') 

     # validate password form 
     if password_change_form.is_valid(): 
      # do something 
     else: 
      # password form has errors, so return both forms 
      return self._render_form(user_update_form , password_change_form) 

    def _render_form(self, user_update_form, password_change_form): 
     context = {'user_update_form': user_update_form, 'password_change_form': password_change_form} 
     return TemplateResponse(self.request, '**/your_template.html', context) 
+0

danke, aber das ist auf lange Sicht keine gute Option. Angenommen, ich benutze ein drittes Formular woanders in der Vorlage, wo es nicht kombiniert werden kann, was dann? –