它可以使用Python字符串中的錯誤信息的格式,但你可能需要使用自定義Field
子類。
爲您要自定義的特定錯誤消息 - 必填字段 - Django的Field
類只是引發錯誤而沒有嘗試任何字符串替換:
def validate(self, value):
if value in validators.EMPTY_VALUES and self.required:
raise ValidationError(self.error_messages['required'])
(ValidationError
沒有做任何要麼)
其他一些錯誤允許錯誤字符串一些特定的增值經銷商(找到他們只是搜索在django/forms/fields.py
raise ValidationError
),但一個問題的Django已經給你你想要的是現場實例不知道自己的名字。除非你通過了kwarg,否則字段實例並不知道它的標籤,所以在引發異常的地方,Django沒有什麼可以給你的。
在你的情況,你是在自定義標籤傳遞的所有領域,所以你可以嘗試以下的混入,以減輕使您需要的自定義字段類:
class RequiredErrorMsgMixin(object):
def validate(self, value):
if value in validators.EMPTY_VALUES and self.required:
raise ValidationError(
self.error_messages['required'].format(label=self.label)
)
class CustomCharField(RequiredErrorMsgMixin, CharField):
pass
class CustomIntField(RequiredErrorMsgMixin, IntField):
pass
errors = {
'required': _('{label} field is required')
}
class MyForm(forms.Form):
name = CustomCharField(label=_('Name'), error_messages=errors, max_length=80)
age = CustomIntegerField(label=_('Age'), error_messages=errors)
沒了,很肯定你必須覆蓋'__init__' – Anentropic
@Antropic你是不對的。看看默認的** Invalid_choice **消息:*選擇一個有效的選擇。 %(值)S不是可用選項之一*。 – niekas
這與「字段是必需的」錯誤消息的情況不相關,該消息不採取任何格式化變量。但是我認爲覆蓋表單的'__init__'可能不是最好的方法 – Anentropic