首页 > 解决方案 > 如果我的 Django 应用程序中的字段为空,请添加一条消息

问题描述

所以我有一个 Django 表单,我想要的是,如果没有填写,它会在每个字段下显示一条消息(如红色)。我尝试在每个字段的小部件中添加“error_messages”属性,但它不起作用。

我的forms.py:

class WordForm(forms.Form):
Word1 = forms.CharField(error_messages={'required': 'Please enter a word'}, required = True, label= 'Word1', 
    widget= forms.TextInput(attrs={
        'class': "form-control is-invalid",
        'placeholder': 'Enter First Word'
    }))
Word2 = forms.CharField(error_messages={'required': 'Please enter a word'}, required = True, label= 'Word2', 
    widget= forms.TextInput(attrs={
        'class': 'form-control is-invalid needs-validation was-validated',
        'placeholder': 'Enter Second Word'
    }))
Word3 = forms.CharField(error_messages={'required': 'Please enter a word'}, required = True, label= 'Word3', 
    widget= forms.TextInput(attrs={
        'class': 'form-control is-invalid',
        'placeholder': 'Enter Third Word'
    }))

Result = forms.CharField(label= 'Result', required=False, 
        widget= forms.TextInput(attrs={'class': 'form-control', 'readonly': 'True'}))

我的form.html:

<form method="post" class="needs-validation was-validated" novalidate>
            {% csrf_token %}
            <h2>Inputs</h2>
            {{ form.as_p }}
</form>

如您所见,我在小部件中添加了错误消息字段和 is-invalid 类,但它不会做任何事情。我真的不知道我是否必须创建一个函数,因为我已经看到了那些反馈消息,但没有看到表单渲染。非常感谢您的帮助。

这是我的界面的样子: 在此处输入图像描述

标签: htmldjangoformserror-handling

解决方案


您需要创建一个模板页面来呈现表单错误消息。你form_error.html应该看起来像这样:

<form method="post" class="needs-validation was-validated" novalidate>
  {% csrf_token %}
  <h2>Inputs</h2>
  {% for field in form %}
      {{ field.label_tag }}
      {{ field }}
      {% if field.errors %}
          {% for error in field.errors %} 
          <div class="your-css-alert-class">
              <strong>{{ error|escape }}</strong>
          </div>
          {% endfor %}
      {% endif %}
  {% endfor %}
</form>

然后在你的view.py,

def submit(request):
    if request.method == "POST":
        ...
        if  form.is_valid():
            ...
        else:
            return render(request, 'form_error.html', {'form': form})

文档中用于呈现错误消息的相关信息

不知道这已经回答过了


推荐阅读