python - 如何在 Django 表单中重新填充用户信息?
问题描述
Previsouly,我使用 forms.ModelForm 创建一个 Django 表单,并在views.py中使用:
p_form = ProfileUpdateForm(request.POST,
request.FILES,
instance=request.user.profile)
这样,如果表单在提交时无效,它将重新填充用户之前输入的信息。这使用户不必再次输入信息。
此后我更改为 forms.Form,因为我不知道如何使用 forms.ModelForm 自定义 Crispy Forms,但现在如果我调用instance=request.user.profile,我会收到错误消息。
我可以做些什么来重新填充用户之前放置在表单中的信息,这样他们就不必再这样做了?
解决方案
initial=…
您可以使用参数 [Django-doc]填充表单的字段,然后包含将字段映射到相应值的字典。
因此,例如,如果您的表单定义为:
class ProfileUpdateForm(forms.Form):
name = forms.CharField()
age = forms.IntegerField()
您可以使用以下方式构建表单:
ProfileUpdateForm(initial={'name': 'Jason G', 'age': 25})
AModelForm
基本上做同样的事情,只是在这里它从instance=…
参数中获取初始值,从而从该对象中获取属性并将这些属性传递给相应的表单字段。
话虽这么说,通常脆的形式与 s 配合得很好ModelForm
,所以也许最好看看你的ModelForm
s 有什么问题,并尝试通过“规避”问题来解决这个问题,但会使你的表单更难使用.
推荐阅读
- haskell - 有流水线单子吗?
- angular - 'ng build --prod' 因模板编译错误而失败
- javascript - 控制器值“null”问题。Laravel/Vue
- java - Reactor 多路复用:仅向一个订阅者发送事件
- reactjs - 如何将 styledcomponent 中的 prop 传递给 stylerule?
- arrays - 在 prisma 中的 Int 上插入数组
- sql - 使用 Cross APPLY 或 CROSS-JOIN 时 SQL Server 2012 查询返回重复行
- swift - 为什么我需要在这个 Swift 开关中使用默认情况?
- java - Springdata JPA 存储库 findAllByXXX() 返回 null 而不是空列表
- python - 运行具有多个参数的 python 函数