0

我在 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'),
            },
        }

两个问题:

  1. 对于 RegEx 验证器,错误消息没有被我的自定义消息替换。在最小值和最大值的验证器上,我必须为属性指定 min_value 和 max_value 以覆盖消息。但是对于 RegEx 验证器,我应该覆盖哪个属性?此外,对于任何给定的验证器,我如何知道要为 error_message 覆盖的正确属性?我想在 Meta 中做到这一点,而不是其他方式。

  2. 我看到对于 MinValue 和 MaxValue 验证器,我可以在字符串 %(limit_value)d 和 %(show_value)d 中使用变量。我想知道我如何知道对于任何给定的验证器我可以使用哪些变量。而且,是否有一个变量可以用于 verbose_name,比如 %(verbose_name)d?例如,我可以用一个变量替换我硬编码的单元/套房号,然后能够使错误消息通用。

4

0 回答 0