【问题标题】:How to make Django forms return only one error message instead of a list of error messages for one field?如何使 Django 表单只返回一个错误消息而不是一个字段的错误消息列表?
【发布时间】:2014-12-20 19:57:24
【问题描述】:

我正在使用 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.']}

如您所见,表单错误返回一个字典,并且表单字段/键“名称”存在错误消息列表。如何确保 Django 仅返回一个字符串作为错误消息,而不是此表单字段的错误消息列表?

提前感谢您的帮助!

亲切的问候, K.

【问题讨论】:

    标签: django forms rest


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      更新!

      而解决方法是:重写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 很棒! ;-)

      【讨论】:

        猜你喜欢
        • 2013-09-30
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多