如何获取form.errors的确切消息?

时间:2013-04-01 04:15:36

标签: python django

我正在尝试只获取表单的错误消息。但是有消息显示特殊字符。

以下是我的代码:

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()])

1 个答案:

答案 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>