【问题标题】:Django DecimalField form field errors not shown in template模板中未显示 Django DecimalField 表单字段错误
【发布时间】:2023-01-10 08:35:50
【问题描述】:

我有一个愚蠢的问题。我有一个允许保留 1 位小数的小数字段。我需要手动遍历模板中的表单字段并呈现它们。如果在模板中我将输入设置为 type="text" 并在表单中输入带两位小数的数字,则会在模板中显示错误消息(“确保小数点后不超过 1 位。”)。但是,当我将输入设置为 type="number" 和 step="0.1" 时,错误不会显示在模板中。我可以将其设置为文本,但这意味着用户可以输入任何字符。我不想这样做,而是将其设置为 type="number",这样他们只能输入数字。

任何帮助,将不胜感激。

最小代码:

# forms.py
class TimeForm(forms.Form):
    time = forms.DecimalField(max_digits=3, decimal_places=1, label = 'Time')

# template
<form method="POST">
{% csrf_token %}
<div>
 <input type="number" step="0.1" class="form-control {% if form.time.errors %} is-invalid {% endif %}" 
  name="{{form.time.name}}" id="{{ form.time.id_for_label }}"
  {% if form.time.value %} value="{{form.time.value}}" {% else %} placeholder="Total Time" {% endif %}>
  {% if form.time.errors %}
    {% for error in form.time.errors %}
      <span class="invalid-feedback">{{error}}</span>
    {% endfor %}
  {% endif %}
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    我解决了我的问题。我遇到了另一个类似的问题,我的表单没有按照我希望的方式呈现错误。我想给输入字段一个红色边框,并像 bootstrap 一样在其下方显示错误。但是我在输入字段中看到了一个弹出窗口。这是浏览器在做一些验证。解决方案是将 novalidate 属性添加到表单标签。

    <form novalidate method="POST">
    

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 2017-12-15
      • 2021-07-28
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2011-10-11
      • 2011-05-28
      相关资源
      最近更新 更多