我可以看到在使用表单时如何向字段添加错误消息,但是模型表单呢?
这是我的测试模型
class Author(models.Model):
first_name = models.CharField(max_length=125)
last_name = models.CharField(max_length=125)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
我的模特表格
class AuthorForm(forms.ModelForm):
class Meta:
model = Author
字段上的错误消息:first_name和last_name是“此字段是必需的”。如何在模型表单中更改它?
答案 0 :(得分:46)
ModelForm接受几个新的Meta选项。
- localized_fields列表中包含的字段将被本地化(通过在表单字段上设置localize)。
- 标签,help_texts和error_messages选项可用于自定义默认字段,有关详细信息,请参阅Overriding the default fields。
从那起:
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}
help_texts = {
'name': _('Some useful help text.'),
}
error_messages = {
'name': {
'max_length': _("This writer's name is too long."),
},
}
答案 1 :(得分:38)
对于简单的情况,您可以specify custom error messages
class AuthorForm(forms.ModelForm):
first_name = forms.CharField(error_messages={'required': 'Please let us know what to call you!'})
class Meta:
model = Author
答案 2 :(得分:15)
我也多次想过这件事。这就是为什么我最终为ModelForm类编写了一个小扩展,它允许我通过Meta类设置任意字段属性 - 包括错误消息。代码和说明可以在这里找到:http://blog.brendel.com/2012/01/django-modelforms-setting-any-field.html
你将能够做到这样的事情:
class AuthorForm(ExtendedMetaModelForm):
class Meta:
model = Author
field_args = {
"first_name" : {
"error_messages" : {
"required" : "Please let us know what to call you!"
}
}
}
我认为这就是你要找的,对吗?
答案 3 :(得分:15)
另一种简单的方法是在init中覆盖它。
class AuthorForm(forms.ModelForm):
class Meta:
model = Author
def __init__(self, *args, **kwargs):
super(AuthorForm, self).__init__(*args, **kwargs)
# add custom error messages
self.fields['name'].error_messages = {'required': 'Please let us know what to call you!'}
答案 4 :(得分:7)
最简单的方法是覆盖clean方法:
class AuthorForm(forms.ModelForm):
class Meta:
model = Author
def clean(self):
if self.cleaned_data.get('name')=="":
raise forms.ValidationError('No name!')
return self.cleaned_data
答案 5 :(得分:5)
根据jamesmfriedman的回答,我有一个更清洁的解决方案。 这个解决方案更加干燥,特别是如果你有很多领域。
custom_errors = {
'required': 'Your custom error message'
}
class AuthorForm(forms.ModelForm):
class Meta:
model = Author
def __init__(self, *args, **kwargs):
super(AuthorForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].error_messages = custom_errors
答案 6 :(得分:2)
您可以通过覆盖clean()
方法并使用self.add_error(field, message)
轻松检查并输入自定义错误消息:
def clean(self):
super(PromotionForm, self).clean()
error_message = ''
field = ''
# reusable check
if self.cleaned_data['reusable'] == 0:
error_message = 'reusable should not be zero'
field = 'reusable'
self.add_error(field, error_message)
raise ValidationError(error_message)
return self.cleaned_data