我创建了一个Django表单:
class AddFaceForm(forms.ModelForm):
class Meta:
model = Face
fields = ('person', 'x', 'y', 'w', 'h')
在Face
模型中,w
定义为
w = models.DecimalField(
'Relative width',
validators=[MinValueValidator(0.05), MaxValueValidator(1)]
)
如果用户输入0作为宽度,则表单验证时Django返回的错误消息为
确保此值大于或等于0.05。
所以很好地包含MinValueValidator
的值。我想将其更改为“相对宽度必须> = 0.05”。
为实现这一目标,我尝试在AddFaceForm Meta中自定义错误
class AddFaceForm(forms.ModelForm):
class Meta:
model = Face
fields = ('person', 'x', 'y', 'w', 'h')
error_messages = {
'w': {
'min_value': 'Relative width must be >= 0.05'
}
}
但这意味着对0.05值进行硬编码。我想从模型定义中读取它。怎么办呢?
答案 0 :(得分:1)
很棒的问题。
MinValueValidator是BaseValidator的子类。并且,BaseValidator
在其构造函数中接受可选消息。从code您可以看到该消息可以使用以下三个参数:limit_value
,show_value
和value
。 limit_value
是验证程序的最小值,在这种情况下为0.05
。 show_value
是用户输入的清理值,value
是他们输入的原始值。因此,您可以执行以下操作来实现目标:
from django.core.validators import MinValueValidator
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Face(models.Model):
w = models.DecimalField(
'Relative width',
max_digits=5,
decimal_places=2,
validators=[MinValueValidator(0.05, _('Relative width must be >= %(limit_value)s'))],
)
或者,如果您希望在表单中指定错误消息,则可以执行以下操作:
from django import forms
from django.utils.translation import ugettext_lazy as _
from .models import Face
class FaceForm(forms.ModelForm):
class Meta:
model = Face
fields = ['w']
error_messages = {
'w': {
'min_value': _('Relative width must be >= %(limit_value)s')
}
}
DecimalField文档告诉您可以插入limit_value
。