如何使Django表单只返回一个错误消息而不是一个字段的错误消息列表?

时间:2014-10-24 22:12:00

标签: django forms rest

我正在使用Django表单和Django REST Framework来创建项目。

现在我想知道:如何让Django每个表单字段只返回一条错误消息,而不是每个表单字段返回错误消息列表?

我会用代码示例进一步解释自己。

我在Django中定义了一个表单:

class EditProfileForm(forms.Form):
    name = forms.CharField(required=True, max_length=50)
    description = forms.CharField(required=False, max_length=200)
    url = forms.URLField(required=False, max_length=100)
    location = forms.CharField(required=False, max_length=100)

现在我在Django上下文(python manage.py shell)中运行此表单上的验证:

>>> f=EditProfileForm({})
>>> f.is_valid()
False
>>> f._errors
{'name': [u'This field is required.']}

正如您所看到的,表单错误会返回一个字典,并且表单字段/键" name"中存在一个错误消息列表。如何确保Django仅返回一个字符串作为错误消息而不是此表单字段的错误消息列表?

提前感谢您的帮助!

亲切的问候, ķ。

2 个答案:

答案 0 :(得分:0)

当我查看Django代码时,我认为我需要用其他东西修改/覆盖ErorrList或ErrorDict类,但我不确定这是否是一个聪明的想法......我正在使用Django 1.7.1顺便说一句。

答案 1 :(得分:0)

更新!

解决方案是:覆盖ErrorList类。

from django import forms
from django.forms.utils import ErrorList

class CustomErrorList(ErrorList):
     def as_text(self):
        return u'%s' % self[0]

class CustomForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(CustomForm, self).__init__(*args, **kwargs)
        self.error_class = CustomErrorList

现在,当您调用as_text()方法时,将返回列表中的唯一一条错误消息(对于相同的密钥)。顺便说一句,Django很棒! ; - )