2009-12-01 39 views
7

Tôi đang cố gắng hiển thị một ModelForm đơn giản cho tiểu sử của người dùng và cho phép người dùng cập nhật hồ sơ. Vấn đề ở đây là logic của tôi là bằng cách nào đó thiếu sót, và sau khi một cuộc gọi form.save() thành công, các giá trị cũ hiển thị trên trang. Nó không phải là cho đến khi làm mới mà giá trị thích hợp được hiển thị. Có gì sai ở đây?Django, cập nhật hồ sơ người dùng với 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)) 

Tôi chỉ đang tìm cách cập nhật tiểu sử hiện có, không thêm tiểu sử mới.

Trả lời

8

Hãy thử điều này:

@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

Bạn cũng có thể sử dụng một 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') 
Các vấn đề liên quan