1

我试图只获取表单的错误消息。但是消息中会显示特殊字符。

这是我的代码:

表格.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 

视图.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()])
4

1 回答 1

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>
于 2013-04-01T04:29:03.033 回答