【问题标题】:Keeping typed in form data in django在 django 中输入表单数据
【发布时间】:2014-02-01 16:47:49
【问题描述】:

我有一个表单,如果出现表单验证错误,我希望数据仍然存在于表单字段中。默认情况下,当我尝试以表单 django 提交数据时会清除所有字段。使用 django 1.6 执行此操作的最佳方法是什么?

我以为我会像这样获取数据:request.POST['field'],将其发送到模板,然后让模板运行条件 if 语句,因为我从 django 收到一个错误,告诉我这些值不是在 multidict 中找到但是当我填写表单字段时发现它似乎不起作用。我还尝试检查该值是否直接存在于视图中,但我最终得到了大量可笑的 if 语句才能做到这一点,这只是一个丑陋的 hack。

有人可以为此提出一个好的工作解决方案吗?我似乎在 SO 上遇到了同样的问题,但人们只是写道,保留数据应该是默认设置,但 django 1.6 似乎并非如此。

【问题讨论】:

  • 您使用的是基于类还是基于函数的视图?
  • using a form in a view 上的文档准确显示了要做什么,这在 1.6 中没有改变。
  • 此时我仍在使用基于函数的视图。我阅读了 daniel 文档,但我看不出它是如何解决我的特定问题的。它说的是如何处理表单,而不是如果表单没有验证如何保持已经输入的数据。我这样做了,如果我没有绑定表单没有发布数据并绑定它(如果有),并运行 form.is_valid ,但如果 form.is_valid 失败,则所有字段都被清除..也许我错过了一些东西,但我不止一次读过

标签: python django forms


【解决方案1】:

我想象你的表单类MyForm()。如果表单无效,请发送form = MyForm(request.POST) 到模板。

一些观点:

def myview(request):

   if request.method=='POST':
      form = MyForm(request.POST)
      if form.is_valid():
         form.save()
         return render(request, 'success.html')
   else:
      form = MyForm()
   return render(request, 'form.html',{'form':form})

<form action="." method="POST">
{{form}}
</form>

【讨论】:

  • 你在这里不必要地实例化了两次表单,并且没有成功重定向。
  • @DanielRoseman 感谢您的纠正我已经编辑了我的答案。
  • 这基本上是我在做什么,但如果表单没有验证,它会清除表单字段
  • 我现在看到您使用的是 {{ form }},我不喜欢这样做,因为我喜欢设置字段样式并拥有完全的控制权,也许这就是它不起作用的原因..跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多