【问题标题】:How can I provide the initial value for a form field that will be created using jQuery?如何为将使用 jQuery 创建的表单字段提供初始值?
【发布时间】:2021-01-08 09:29:40
【问题描述】:

我在 Django 网站中有一个表单。显示表单时,我使用 jQuery 创建了一个新字段。比如:

$("#field_defined_in_form").after(
    '<input class="numberinput" type="number" step="1" id="id_new_field" name="new_field">'
)

我可以通过 POST 将"#id_new_field" 中提供的信息保存到数据库中。但是,当我想编辑数据库中的信息时,我需要为"#id_new_field"提供初始值。

1 - 如何为将使用 Jquery 创建的表单字段提供初始值?

我试过了:

initial = {
    'new_field': 'Initial_value',
}
form = TheFormClass(initial=initial)

但这不起作用。

2 - 有什么方法可以使用 jQuery 访问表单初始值?我猜不是,但我问一下以防万一。

我还可以通过模板将值传递给 jQuery,例如:

<script>
        window.pageData = {
            new_field : '{{new_field_value}}',
        }
</script>

现实生活中的问题包括不固定数量的new_field,所以我尝试传递整个初始字典。

<script>
        window.pageData = {
            initial : '{{initial}}',
        }
</script> 

这不起作用,因为 initial 变成了字符串而不是对象。所以:

3 - 如何将 python dict 初始值传递给 jQuery 对象,以便我可以在 jQuery 中访问 initial['new_field'] 并设置 "#id_new_field" 的初始值?

【问题讨论】:

  • 您应该再次尝试您的第一种方法,它应该可以按预期工作,也许您声明的字段名称是错误的stackoverflow.com/questions/604266/…
  • @LinhNguyen 字段名称正确。还是不行。

标签: jquery django forms


【解决方案1】:

要将字典传递给模板脚本,您应该使用“|safe”过滤器

<script>
    window.pageData = {{initial|safe}}
</script> 

或者你可以将数据作为 json 传递并在你的脚本中解析它

【讨论】:

  • 在我将所有初始值都转换为字符串后,它起作用了。谢谢!!
  • 它是这样工作的,但这不是最好的方法。最好使用 json 在 js 和 python 之间传递数据,以避免出现 None、True/False 值等问题。在您的情况下,使用动态字段创建来查看表单可能会更好。这将让您使用 django 功能来处理表单(清理、验证等)。这不是太难。您可以在表单类 init 方法 中动态定义字段
猜你喜欢
  • 2017-08-30
  • 2021-05-21
  • 1970-01-01
  • 2019-01-31
  • 2011-04-10
  • 2010-12-25
  • 2018-05-27
  • 2022-01-15
  • 2019-03-20
相关资源
最近更新 更多