2017-05-04 2 views
0

Je crée une page pour mettre à jour le nom d'utilisateur de l'utilisateur. Mais à l'avant, s'il existe, le nom d'utilisateur django montre les erreurs (ok) mais change l'instance de request.user. Donc, mon nom d'utilisateur sur le menu change et entrée aussi. J'ai besoin d'actualiser la page pour revenir à la normale.Réinitialiser le formulaire Django avec l'instance

form_profile = UserProfileForm(request.POST or None, instance = UserProfile.objects.get(user = request.user)) 
    form_user = UserForm(request.POST or None, instance = request.user) 
    if form_profile.is_valid() and form_user.is_valid(): 
     form_profile.save() 
     form_user.save() 

    template = loader.get_template('users/user_edit.html') 
    return HttpResponse(template.render({"form_profile":form_profile, "form_user": form_user}, request)) 

Je ne peux pas réinitialiser la forme avec form_profile = UserProfileForm(), car la page d'édition de l'utilisateur. J'ai besoin de "réinitialiser" le formulaire avec les informations réelles.

Screenshot enter image description here

Répondre

1

Si vous allez chercher l'utilisateur de la db et l'utiliser comme l'instance de formulaire, puis request.user ne devrait pas changer.

user = User.objects.get(id=request.user.id) 
form_user = UserForm(request.POST or None, instance=user) 

En aparté, il est généralement recommandé de rediriger après une demande de poste réussi (même si vous redirigez vers la même URL). Vous pouvez également utiliser le raccourci render pour simplifier votre code:

from django.shortcuts import render, redirect 

def my_view(request): 
    form_profile = UserProfileForm(request.POST or None, instance = UserProfile.objects.get(user = request.user)) 
    form_user = UserForm(request.POST or None, instance = request.user) 
    if form_profile.is_valid() and form_user.is_valid(): 
     form_profile.save() 
     form_user.save() 
     return redirect('/success-url/') 

    return render(request, 'users/user_edit.html', {"form_profile":form_profile, "form_user": form_user}) 
+0

Cela fonctionne! A propos de rendre, faites la même chose, mais vous exemple est un raccourci. merci encore haha –