Django,使用 ModelForm 更新用户配置文件

Posted

技术标签:

【中文标题】Django,使用 ModelForm 更新用户配置文件【英文标题】:Django, updating a user profile with a ModelForm 【发布时间】:2009-12-01 02:05:50 【问题描述】:

我正在尝试为用户的个人资料显示一个简单的 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))

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

【问题讨论】:

【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:

您也可以使用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')

【讨论】:

以上是关于Django,使用 ModelForm 更新用户配置文件的主要内容,如果未能解决你的问题,请参考以下文章

Django:ModelForm 使用自定义查询预填充复选框

四用django2.0来开发后台会员管理 ModelForm表单的使用方法以及数据验证

如何使用 Ajax 在 Django 中更新 modelForm

django中的Form和ModelForm中的问题

Django - ModelForm 创建还是更新? [复制]

如何在 Django ModelForm 中获取实例