在“中发现错误后,如何继续检查错误”;如果Django,Python
我有这段代码来检查表单中的错误。用户出错后,它会显示首次发现的错误。但若错误属于多个错误,它将只显示第一个错误在“中发现错误后,如何继续检查错误”;如果Django,Python,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,我有这段代码来检查表单中的错误。用户出错后,它会显示首次发现的错误。但若错误属于多个错误,它将只显示第一个错误 #forms.py def clean_file_name(self): name = self.cleaned_data['file_name'] if len(name) < 2: raise forms.ValidationError('File name is too short') if F
#forms.py
def clean_file_name(self):
name = self.cleaned_data['file_name']
if len(name) < 2:
raise forms.ValidationError('File name is too short')
if FileDescription.objects.filter(file_name = name).exists():
raise forms.ValidationError('File with this name already exists')
else:
return name
#template
<ul>
{% for field in form %}
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
{% endfor %}
</ul>
#forms.py
def clean_文件名(自身):
name=self.cleaned_数据['file_name']
如果len(名称)<2:
raise forms.ValidationError('文件名太短')
如果FileDescription.objects.filter(文件名=name).exists():
raise forms.ValidationError('具有此名称的文件已存在')
其他:
返回名称
#模板
{%形式的字段为%}
{%字段中有错误。错误%}
- {{error}}
{%endfor%}
{%endfor%}
若用户将输入“a”,那个么数据库中已经存在同名的文件(假设在我写长度检查之前它就在那个里)
产出将是:
“文件名太短”
但我希望代码中的两个错误都能显示出来,希望能有所帮助
if isinstance(self.errors.get('field_name'), forms.util.ErrorList):
self.errors['field_name'].append(_('My error'))
else:
self.errors['field_name'] = forms.util.ErrorList([_('MyError')])
这个怎么样
def clean_file_name(self):
name = self.cleaned_data['file_name']
error = ''
if len(name) < 2:
error += 'File name is too short'
if FileDescription.objects.filter(file_name = name).exists():
if error:
error += ' '
error += 'File with this name already exists'
if error:
raise forms.ValidationError(error)
return name
def clean_文件名(self):
name=self.cleaned_数据['file_name']
错误=“”
如果len(名称)<2:
错误+='文件名太短'
如果FileDescription.objects.filter(文件名=name).exists():
如果出现错误:
错误+=''
错误+='具有此名称的文件已存在'
如果出现错误:
引发表单。ValidationError(错误)
返回名称
还是你想让它们成为两颗独立的子弹?如果是这样,您需要将它们添加到self.errors列表中(参见Alexander的回答),然后引发ValidationError以确保表单不会处理