【问题标题】:How can I change the default error message for a validator in django如何更改 django 中验证器的默认错误消息
【发布时间】:2015-02-12 13:39:23
【问题描述】:

我有一个模型字段,它使用验证器来限制最大值。但是错误消息显示“确保此值小于或等于 40。”。有没有办法将其更改为自定义消息?

from django.core.validators import MaxValueValidator
class Bucket(models.Model):
    items = models.PositiveIntegerField(validators=[MaxValueValidator(40)])

谢谢

【问题讨论】:

    标签: django validation


    【解决方案1】:

    你应该继承 MaxValueValidator 并使用它:

    class MyMaxValueValidator(MaxValueValidator):
        message = _('Way over %(limit_value)s.')
    

    然后

    class Bucket(models.Model):
        items = models.PositiveIntegerField(validators=[MyMaxValueValidator(40)])
    

    编辑:如果您使用的是 Django >= 1.8(截至本答案未发布),您可以跳过子类化并按照@catavaran 的建议使用:

    class Bucket(models.Model):
        items = models.PositiveIntegerField(validators=[MaxValueValidator(40, _('Way over %(limit_value)s.')])
    

    【讨论】:

    • @jcasner 可能与本地化不起作用有关。您是否尝试导入 gettext_lazy 而不是 gettext
    • @Selcuk 是的,我正在使用from django.utils.translation import gettext_lazy as _。我什至尝试过明确地使用message=_('new message') 以防万一(我知道,位置参数应该足够了,但使用kwarg 并没有什么坏处)。有趣的是,如果我使用BaseValidator,我可以传递一条消息,但是一旦我覆盖BaseValidator,我就失去了这种能力。
    • @jcasner 建议您将此问题作为新问题发布,以便更多人看到。
    【解决方案2】:

    更新:此功能将在 django 1.8 中引入。对于以前的版本,您应该使用@selcuk 答案中的子类。

    将第二个参数添加到MaxValueValidator 构造函数:

    items = models.PositiveIntegerField(validators=[MaxValueValidator(40,
                            "The value should be lesser than %(limit_value)s.")])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-15
      • 2021-12-30
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多