2009-12-01 9 views
7

J'essaie d'afficher un ModelForm simple pour le profil d'un utilisateur et de permettre à l'utilisateur de le mettre à jour. Le problème ici est que ma logique est en quelque sorte erronée, et après un appel form.save() réussi, les anciennes valeurs s'affichent sur la page. Ce n'est qu'après un rafraîchissement que la valeur appropriée est affichée. Quel est le problème ici? Je cherche juste à mettre à jour un profil existant, pas à en ajouter un nouveau.Django, mise à jour d'un profil utilisateur avec un ModelForm

Répondre

8

Essayez ceci:

@login_required 
def user_profile(request): 
    success = False 
    user = User.objects.get(pk=request.user.id) 
    if request.method == 'POST': 
     upform = UserProfileForm(request.POST, instance=user.get_profile()) 
     if upform.is_valid(): 
      up = upform.save(commit=False) 
      up.user = request.user 
      up.save() 
      success = True 
    else: 
     upform = UserProfileForm(instance=user.get_profile())  

    return render_to_response('profile/index.html', 
     locals(), context_instance=RequestContext(request)) 
3

Vous pouvez également utiliser un generic view:

from django.views.generic.create_update import update_object 

@login_required 
def user_profile(request): 
    return update_object(request, 
         form_class=UserProfileForm, 
         object_id=request.user.get_profile().id, 
         template_name='profile/index.html') 
Questions connexes