我正在尝试只获取表单的错误消息。但是有消息显示特殊字符。
以下是我的代码:
forms.py
class FilterForm(forms.ModelForm):
...........
def clean(self):
cleaned_data = super(FilterForm, self).clean()
payee = cleaned_data.get("payee")
memo = cleaned_data.get("memo")
if not payee or not memo:
raise forms.ValidationError(
"You must put a value either for Payee or Memo")
return cleaned_data
views.py
..............
if request.method == 'POST':
form = FilterForm(request.user, request.POST, instance=filter)
if form.is_valid():
form.save()
messages.success(request, "New rule created successfully")
else:
messages.error(request, [v[0].__str__() for k, v in form.errors.items()])
...........
当我提交无效表格时。我得到这样的输出:
['You must put a value either for Payee or Memo']
如何只收到没有此[' ']
的消息?
//the error message is shown from here
messages.error(request, [v[0].__str__() for k, v in form.errors.items()])
答案 0 :(得分:2)
您正在创建一个包含列表推导表达式[v[0].__str__() for k,v in form.errors.items()]
的列表,这是您获取[ ]
的位置。
这是一种更好的方法来做你正在尝试的事情:
errors = '<br />'.join('<br />'.join(i for i in form.errors.values()))
messages.error(request, errors)
您的表单可能会引发多个错误,这就是您需要循环并获取每个错误项的原因。标准做法是将表单传递回视图,然后从表单对象本身显示错误:
if form.is_valid():
# do stuff
else:
return render(request,{'form': form})
然后在你看来:
{% if form.errors %}
<strong>Please fix the errors</strong><br />
{% endif %}
<form>
{% for field in form %}
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
{% endfor %}
<input type="submit" />
</form>