我理解文档http://docs.djangoproject.com/en/dev/ref/models/fields/,您可以将error_messages添加到模型字段并提供自己的错误消息字典。但是,你应该通过的词典的关键是什么?
class MyModel(models.Model):
some_field = models.CharField(max_length=55, error_messages={'required': "My custom error"})
但是,如果在使用的模型表格上执行此操作更容易,也可以使用。我宁愿不必再创建显式创建每个字段及其类型。这就是我试图避免的:
class MyModelForm(forms.ModelForm):
some_field = forms.CharField(error_messages={'required' : 'Required error'})
更新2:我的项目中使用的测试代码
我的模特:
class MyTestModel(models.Model):
name = models.CharField(max_length=127,error_messages={'blank' : 'BLANK','required' : 'REQUIRED'})
我的表格:
class EditTestModel(ModelForm):
class Meta:
model = MyTestModel
我的观点:
tf = EditTestModel({'name' : ''})
print tf.is_valid() # prints False
print tf.full_clean() # prints None
print tf # prints the form, with a <li> error list containg the error "This field is required"
<tr><th><label for="id_name">Name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_name" type="text" name="name" maxlength="127" /></td></tr>
答案 0 :(得分:5)
你是对的,那些文档不是很有用。毕竟这是最近添加的!
我的猜测是error_messages的正常用法是针对ModelForms的,所以我在这里查看每个字段可接受的错误键列表:http://docs.djangoproject.com/en/dev/ref/forms/fields/#error-messages
但是,如果你想要真正安全而不假设......
目前最可靠的方法是查看django/db/models/fields/__init__.py
处的来源,您可以在其中看到可以指定的每个default_error_messages
以及self.error_messages['invalid']
的实际调用
# Field (base class)
default_error_messages = {
'invalid_choice': _(u'Value %r is not a valid choice.'),
'null': _(u'This field cannot be null.'),
'blank': _(u'This field cannot be blank.'),
}
# AutoField
default_error_messages = {
'invalid': _(u'This value must be an integer.'),
}
以下是模型验证的文档: http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects
刚刚在shell会话中对此进行了测试,它似乎正在运行。怎么了?
我刚刚定义了一个简单的模型:
class SubscriptionGroup(models.Model):
name = models.CharField(max_length=255, error_messages={'blank': 'INVALID!!11', 'null': 'NULL11!'})
# shell
>>> s = SubscriptionGroup()
>>> s.full_clean()
ValidationError: {'name': [u'INVALID!!11']}
答案 1 :(得分:3)
(这一点迟到了,但我自己也经历过同样的问题,因此将其作为一个note_to_self使用它。)
您可以在模型和模型上指定error_messages
。您应该/可以使用的键被定义为here表单字段。问题似乎是(对我而言)表单和相关模型之间的相互关系,以及出现的错误消息以及何时出现。关键在于理解形式和模型实际上是非常松散耦合的,并且确实没有神奇的事情发生。
如果您有一个名为'quote'的模型字段,其max_length为140,并且该模型与该模型关联,则错误消息将起作用:
is_valid()
或errors
),则会返回错误消息将来自模特。所以 - 总结起来相当简单 - 错误消息映射到正在验证的对象 - 可以是模型或模型。
答案 2 :(得分:2)
我试过了。如果您在模型中定义它将无法工作。
您必须在表单中定义error_messages
,如下所示
name = forms.CharField(error_messages={'required': 'this field is required'})