2009-12-01 15 views
7

私は、ユーザのプロファイルに単純なModelFormを表示し、ユーザがそれを更新できるようにしようとしています。ここでの問題は、私のロジックに何らかの欠陥があり、form.save()が正常に呼び出された後、古い値がページに表示されることです。適切な値が表示されるまでリフレッシュされません。ここで何が間違っていますか?Django、ModelFormでユーザプロファイルを更新する

@login_required 
def user_profile(request): 
    success = False 
    user = User.objects.get(pk=request.user.id) 
    upform = UserProfileForm(instance=user.get_profile()) 

    if request.method == 'POST': 
     userprofile = UserProfileForm(request.POST, instance=user.get_profile()) 
     if userprofile.is_valid(): 
      up = userprofile.save(commit=False) 
      up.user = request.user 
      up.save() 
      success = True 

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

私はちょうど既存のプロファイルを更新し、新しいプロファイルを追加するつもりはありません。

答えて

8

これを試してみてください:

@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

ます。また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') 
関連する問題