我在 Django Admin 的 ModelForm 上定义了一些验证器:
class AddressesAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddressesAdminForm, self).__init__(*args, **kwargs)
self.fields['unitorsuitenumber'].validators = [MinValueValidator(1), MaxValueValidator(1000)]
self.fields['streetaddress'].validators = [RegexValidator(regExAlphanumericSpacesCommasPeriods)]
在 Meta for ModelForm 中,我可以覆盖 error_messages:
error_messages = {
'unitorsuitenumber': {
'min_value': _('Ensure Unit/Suite Number value is at least %(limit_value)d ' +
'(Current value is %(show_value)d).'),
'max_value': _('Ensure Unit/Suite Number value is not more than %(limit_value)d ' +
'(Current value is %(show_value)d).'),
},
'streetaddress': {
'regexvalidator': _('Only numbers, letters, periods, spaces and dashes are allowed'),
},
}
两个问题:
对于 RegEx 验证器,错误消息没有被我的自定义消息替换。在最小值和最大值的验证器上,我必须为属性指定 min_value 和 max_value 以覆盖消息。但是对于 RegEx 验证器,我应该覆盖哪个属性?此外,对于任何给定的验证器,我如何知道要为 error_message 覆盖的正确属性?我想在 Meta 中做到这一点,而不是其他方式。
我看到对于 MinValue 和 MaxValue 验证器,我可以在字符串 %(limit_value)d 和 %(show_value)d 中使用变量。我想知道我如何知道对于任何给定的验证器我可以使用哪些变量。而且,是否有一个变量可以用于 verbose_name,比如 %(verbose_name)d?例如,我可以用一个变量替换我硬编码的单元/套房号,然后能够使错误消息通用。