【问题标题】:display django form.errors beside the field在字段旁边显示 django form.errors
【发布时间】:2019-06-18 07:37:32
【问题描述】:

当我提交在 django 中实现的表单后出现一些错误时,它会显示在我有 form.errors 的页面顶部。在这里,我希望该错误显示在由于错误发生的字段旁边,就像在 django 用户创建表单中一样。此外,输入的值在错误消息之后都消失了。怎么办??

forms.py

class AddVendorForm(forms.ModelForm):
    class Meta:
        model = Vendor
        fields = '__all__'

views.py

def add_vendor(request):
    if request.method == 'POST':
        form = AddVendorForm(request.POST or None)
        if form.is_valid():
            vendor = form.save(commit=False)
            vendor.save()
            messages.success(request, '{} vendor added.'.format(vendor.name))
            return redirect('add_vendor')
    else:
        form = AddVendorForm()
    return render(request, 'add_vendor.html', {'form': form})

模板

{% if form.errors %}
        <div class="alert alert-danger">
            {{ form.errors }}
        </div>
     {% endif %}

<form action="{% url 'add_vendor' %}" method="post">
   {% csrf_token %}

    <h5>Name <span class="text-danger"></h5>

      <input type="text" name="name" class="form-control" required>

       <h5>Address <span class="text-danger"></h5>

     <input type="text" name="address" class="form-control" >

 <h5>Contact Number <span class="text-danger"></h5>

    <input type="text" name="contact" class="form-control" required>

   <button type="submit" class="btn btn-info">Add</button>
                        </form>

【问题讨论】:

  • 这在文档本身和几十个教程中都有解释。
  • 能否提供一些链接
  • 我为什么要这样做?阅读您使用的工具的文档是您的工作。

标签: django django-forms


【解决方案1】:

遍历表单的字段

{% for field in form %}
    <div class="fieldWrapper">
        {{ field.label_tag }} {{ field }}
        {% if field.help_text %}
        <p class="help">{{ field.help_text|safe }}</p>
        {% endif %}
        <div class="alert alert-danger">{{ field.errors }}</div> 
    </div>
{% endfor %}

参考:https://docs.djangoproject.com/en/2.2/topics/forms/#looping-over-the-form-s-fields

【讨论】:

  • 没有错误,只是显示的form.error没有正确显示
【解决方案2】:

{{form.errors}}的错误。你这样试试

<div class="alert alert-danger">
        <ul>
            {% for field in form %}
                {% if field.errors %}<li>{{ field.label }}: {{ field.errors|striptags }}</li>{% endif %}
            {% endfor %}
        </ul>
</div>

【讨论】:

  • 报错后表单域的值全部清空怎么解决??
  • 把你的forms.py文件和你的views和html文件放在一起
  • 我添加了请检查
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 2018-12-11
  • 2012-07-29
  • 2014-10-30
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多