Django,使用ModelForm更新用户资料

7

我正在尝试显示一个简单的ModelForm,用于用户的个人资料,并允许用户进行更新。问题在于我的逻辑有些错误,在成功调用form.save()后,旧值会显示在页面上。直到刷新后才会显示正确的值。这里出了什么问题?

@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))

我只是想更新现有的个人资料,而不是添加新的。
2个回答

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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接