iJK*_*iJK 44 django django-forms
我可以看到在使用表单时如何向字段添加错误消息,但是模型表单呢?
这是我的测试模型
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)
Run Code Online (Sandbox Code Playgroud)
我的模特形式
class AuthorForm(forms.ModelForm):
class Meta:
model = Author
Run Code Online (Sandbox Code Playgroud)
字段:first_name和last_name上的错误消息是"此字段是必需的".如何在模型表单中更改它?
doc*_*red 47
ModelForm接受几个新的Meta选项.
- localized_fields列表中包含的字段将被本地化(通过在表单字段上设置localize).
- 标签,help_texts和error_messages选项可用于自定义默认字段,请参阅覆盖默认字段以获取详细信息.
由此:
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."),
},
}
Run Code Online (Sandbox Code Playgroud)
相关:Django的ModelForm - 元选项列表在哪里?
che*_*art 41
对于简单的情况,您可以指定自定义错误消息
class AuthorForm(forms.ModelForm):
first_name = forms.CharField(error_messages={'required': 'Please let us know what to call you!'})
class Meta:
model = Author
Run Code Online (Sandbox Code Playgroud)
jam*_*man 17
另一种简单的方法是在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!'}
Run Code Online (Sandbox Code Playgroud)
jbr*_*del 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!"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这就是你要找的,对吧?
最简单的方法是覆盖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
Run Code Online (Sandbox Code Playgroud)
基于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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36317 次 |
| 最近记录: |