Django:模板中的 Crispy 表单验证错误
Posted
技术标签:
【中文标题】Django:模板中的 Crispy 表单验证错误【英文标题】:Django: Crispy Forms Validation Error in Template 【发布时间】:2021-02-11 07:43:10 【问题描述】:我正在使用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
很好地呈现与表单相关的验证错误?
与字段相关的错误显示得很好。
【问题讨论】:
【参考方案1】:您可以使用|as_crispy_errors
template filters [readthedocs]:
<form method="post">
% csrf_token %
form|as_crispy_errors
<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>
此模板过滤器将:
以与
django-crispy-forms
相同的方式呈现仅表单错误。
【讨论】:
以上是关于Django:模板中的 Crispy 表单验证错误的主要内容,如果未能解决你的问题,请参考以下文章
使用内联表单在 django-crispy-forms 中呈现字段错误
如何使用 Ajax 渲染 django-crispy-forms 的验证错误?
在 django-crispy 按钮名称中使用 django 模板变量
在 python 中通过 django-crispy-forms 渲染表单