启用Django默认表单验证错误的多个版本

时间:2018-10-03 16:03:23

标签: django django-forms

Django表单正在获得两种类型的用户:user Auser B。这些用户填写一个单独的文本字段,然后按提交按钮。

如果用户将文本字段留空并按Submit,则将引发Django的内置required验证错误。

我的要求是要有两个不同的required验证错误。 User A将看到常规的required验证错误,而user B将看到不同的版本。

我无法实现此目的。我通过__init__向表单类的self.user_type = kwargs.pop('user_type',None)方法传递了一个特殊参数。但是,我似乎无法用它来覆盖required验证错误。

为什么?因为目前required验证错误的定义方式如下:

class TextForm(forms.Form):
    text = forms.CharField(error_messages={'required':'Please write something'})

我不知道如何访问self.user_type中可用的error_messages才能获得我想要的东西。

更有经验的开发人员可以加入吗?预先感谢,如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

我发现实际上可以通过error_messages通过__init__方法访问self.fields['username'].error_messages字典。然后,可以使用特殊参数来区分各种情况下的验证错误,例如:

def __init__(self, *args, **kwargs):
    self.user_type = kwargs.pop('user_type',None)
    super(TextForm, self).__init__(*args, **kwargs)
    self.fields['text'].error_messages = {'required': custom_validation_err_string(utype=self.user_type)}
在给定custom_validation_err_string()的情况下,

user_type仅返回所需的字符串。这是一个非常简单的解决方案,并且可以很好地扩展。