Django,使用ModelForm更新用户资料

7 投票
2 回答
5726 浏览
提问于 2025-04-15 16:33

我正在尝试显示一个简单的用户资料表单,让用户可以更新自己的资料。问题是我的逻辑似乎有点问题,在成功保存表单后,页面上仍然显示的是旧的值。只有在刷新页面后,才会显示正确的值。这里到底出了什么问题呢?

@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 个回答

3

你也可以使用一个叫做通用视图的东西:

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

撰写回答