【问题标题】:How do I repopulate user info in a Django form?如何在 Django 表单中重新填充用户信息?
【发布时间】:2020-05-12 18:13:10
【问题描述】:

以前,我使用 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,我会得到一个错误。

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

【问题讨论】:

  • 我认为当您使用模型表单时,仅解决脆表单的问题可能更有意义。你能分享一下出了什么问题吗?通常酥脆的表格与ModelForms 配合得很好,所以我想这是你遇到的一个小问题。
  • 你可以使用initial,但这只会让以后的问题变得更加困难。
  • 我修复了我的代码,以便在提交时不会出现问题。我只是想这是一个额外的步骤,以防在提交过程中出现问题。

标签: python django


【解决方案1】:

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

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

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

你可以构造一个表单:

ProfileUpdateForm(<b>initial={'name': 'Jason G', 'age': 25}</b>)

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

话虽如此,通常酥脆的表格与ModelForms 配合得很好,所以也许最好看看你的ModelForms 有什么问题,并尝试通过“规避”问题来解决这个问题,但会使处理表单变得更加困难。

【讨论】:

  • 谢谢。与往常一样,您的回答非常有帮助。我相信我已经解决了表单提交的所有问题,你是对的,我应该看看问题是什么,而不是试图规避它。谢谢!
  • Willem - 如果有人想编辑他们的个人资料,我将如何重新填充这些字段?
  • @JasonG:你可以用initial={'name': userprofile.name, 'age': userprofile.age}制作字典。
  • 这看起来正确吗?我刚刚添加了 Test 以查看它是否会填充(它不会) form = ProfileUpdateForm(request.POST, request.FILES, initial={'first_name': 'Test'})
  • 删除 request.POST 和 request.FILES 后,initial 将填充字段,但是,我需要 request.POST 和 request.FILES 来存储到数据库。
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多