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
相关产品推荐
相关产品推荐

