我正在尝试覆盖Django表单中的默认错误消息:
class RegistrationForm(forms.Form):
my_errors = {
'required': 'To pole jest wymagane'
}
email = forms.EmailField(max_length=254, error_messages=my_errors.update({'invalid': 'Podaj prawidłowy adres e-mail'}))
password = forms.CharField(error_messages=my_errors)
firstname = forms.CharField(max_length=80, error_messages=my_errors)
lastname = forms.CharField(max_length=80, error_messages=my_errors)
def clean_email(self):
email = self.cleaned_data['email']
User = get_user_model
try:
User.objects.get(email=email)
raise forms.ValidationError('Adres e-mail jest już zajęty')
except User.DoesNotExist:
return email
我可以轻松更改“必需”错误消息,因为每个字段都是相同的。
但对于电子邮件字段,我希望“无效”消息更具体,因此我将现有的dict与包含电子邮件错误消息的dict合并。
但它不起作用:电子邮件字段返回默认错误消息,而其余字段使用我的错误消息。
请解释为什么会发生以及如何解决,谢谢
答案 0 :(得分:1)
dict.update
就地修改了dict,并返回None
。因此,在声明error_messages=None
字段时,您将传递email
。
代码的另一个不良副作用是将"invalid"
添加到my_errors
,并在声明其余字段时传递扩展my_errors
。
您需要合并dicts而不是update
,例如:
class RegistrationForm(forms.Form):
my_errors = {
'required': 'To pole jest wymagane'
}
email = forms.EmailField(max_length=254, error_messages=dict(my_errors, invalid='Podaj prawidłowy adres e-mail'))
password = forms.CharField(error_messages=my_errors)
...