Django:模板中的 Crispy Forms 验证错误
Django: Crispy Forms Validation Error in Template
我正在使用 django-crispy-forms
来呈现精美的表单。
对于我的一个表单,我不得不进行一些自定义调整,现在想知道如何正确验证不属于特定字段但属于整个表单的错误。
具体来说,我的表单包含开始日期和结束日期:
# forms.py
class PlotForm(forms.Form):
start_date = forms.DateField(initial=last_month, widget=forms.widgets.DateInput(attrs={'type': 'date'}))
end_date = forms.DateField(initial=datetime.date.today, widget=forms.widgets.DateInput(attrs={'type': 'date'}))
def clean(self):
cleaned_data = super().clean()
start_date = cleaned_data.get('start_date')
end_date = cleaned_data.get('end_date')
if start_date > end_date:
raise forms.ValidationError("Start date must not be before end date.")
return start_date
为了检查结束日期是否早于开始日期,我使用 clean(self)
。
但是,错误永远不会显示。
<form method="post">
{% csrf_token %}
<div class="row">
<div class="col-6">
{{ form.start_date|as_crispy_field }}
</div>
<div class="col-6">
{{ form.end_date|as_crispy_field }}
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
我可以通过添加 {{ form.errors }}
来解决这个问题,但这看起来真的很难看。有什么简单的方法可以用 crispy
很好地呈现与表单相关的验证错误吗?
与字段相关的错误显示得很好。
您可以使用 |as_crispy_errors
template filters [readthedocs]:
<form method="post">
{% csrf_token %}
{{ form<b>|as_crispy_errors</b> }}
<div class="row">
<div class="col-6">
{{ form.start_date|as_crispy_field }}
</div>
<div class="col-6">
{{ form.end_date|as_crispy_field }}
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
此模板过滤器将:
Renders only form errors the same way as django-crispy-forms
.
我正在使用 django-crispy-forms
来呈现精美的表单。
对于我的一个表单,我不得不进行一些自定义调整,现在想知道如何正确验证不属于特定字段但属于整个表单的错误。
具体来说,我的表单包含开始日期和结束日期:
# forms.py
class PlotForm(forms.Form):
start_date = forms.DateField(initial=last_month, widget=forms.widgets.DateInput(attrs={'type': 'date'}))
end_date = forms.DateField(initial=datetime.date.today, widget=forms.widgets.DateInput(attrs={'type': 'date'}))
def clean(self):
cleaned_data = super().clean()
start_date = cleaned_data.get('start_date')
end_date = cleaned_data.get('end_date')
if start_date > end_date:
raise forms.ValidationError("Start date must not be before end date.")
return start_date
为了检查结束日期是否早于开始日期,我使用 clean(self)
。
但是,错误永远不会显示。
<form method="post">
{% csrf_token %}
<div class="row">
<div class="col-6">
{{ form.start_date|as_crispy_field }}
</div>
<div class="col-6">
{{ form.end_date|as_crispy_field }}
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
我可以通过添加 {{ form.errors }}
来解决这个问题,但这看起来真的很难看。有什么简单的方法可以用 crispy
很好地呈现与表单相关的验证错误吗?
与字段相关的错误显示得很好。
您可以使用 |as_crispy_errors
template filters [readthedocs]:
<form method="post">
{% csrf_token %}
{{ form<b>|as_crispy_errors</b> }}
<div class="row">
<div class="col-6">
{{ form.start_date|as_crispy_field }}
</div>
<div class="col-6">
{{ form.end_date|as_crispy_field }}
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
此模板过滤器将:
Renders only form errors the same way as
django-crispy-forms
.