You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何让ModelForm表单显示模型字段的当前已有值?

修复方案

你的问题核心是GET请求分支下给两个表单传递的实例对象完全颠倒,导致表单无法匹配对应模型的已有字段值:

  • UserForm 绑定的是Django内置User模型,需要传入request.user作为实例参数
  • UsuarioForm 绑定的是自定义USUARIO模型,需要传入request.user.usuario作为实例参数

只需修改views.py中GET请求分支的代码即可,修改后完整视图代码如下:

@login_required
@transaction.atomic
def modificar_cadastro(request):
    if request.method == "POST":
        user_form = UserForm(request.POST, instance=request.user)
        usuario_form = UsuarioForm(request.POST, instance=request.user.usuario)
        if usuario_form.is_valid() and user_form.is_valid():
            user_form.save()
            usuario_form.save()            
            return render(request, 'index.html')
        else:
            messages.error(request, ('Please correct the error below.'))
    else:
        # 此处修正两个表单的instance参数
        user_form = UserForm(instance=request.user)
        usuario_form = UsuarioForm(instance=request.user.usuario)
    return render(request, 'modificar-cadastro.html', {
        'usuario_form': usuario_form,
        'user_form': user_form,
    })

可选优化

当前代码在POST提交验证失败时,返回给用户的是填写错误的表单实例,符合使用逻辑;如果需要提交成功后跳转到首页而非直接渲染,建议把return render(request, 'index.html')替换为return redirect('index'),避免用户重复提交表单。

内容的提问来源于stack exchange,提问作者Jackgba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 09:39:04