首页 > 解决方案 > 如何在 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,我会收到错误消息。

我可以做些什么来重新填充用户之前放置在表单中的信息,这样他们就不必再这样做了?

标签: pythondjango

解决方案


initial=…您可以使用参数 [Django-doc]填充表单的字段,然后包含将字段映射到相应值的字典。

因此,例如,如果您的表单定义为:

class ProfileUpdateForm(forms.Form):
    name = forms.CharField()
    age = forms.IntegerField()

您可以使用以下方式构建表单:

ProfileUpdateForm(initial={'name': 'Jason G', 'age': 25})

AModelForm基本上做同样的事情,只是在这里它从instance=…参数中获取初始值,从而从该对象中获取属性并将这些属性传递给相应的表单字段。

话虽这么说,通常脆的形式与 s 配合得很好ModelForm,所以也许最好看看你的ModelForms 有什么问题,并尝试通过“规避”问题来解决这个问题,但会使你的表单更难使用.


推荐阅读