如何在Django中的模型上使用error_messages

Joe*_*tar 7 django django-models django-forms

我理解文档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"})
Run Code Online (Sandbox Code Playgroud)

但是,如果在使用的模型表格上执行此操作更容易,也可以使用.我宁愿不必再创建显式创建每个字段及其类型.这是我试图避免的:

class MyModelForm(forms.ModelForm):
    some_field = forms.CharField(error_messages={'required' : 'Required error'})
Run Code Online (Sandbox Code Playgroud)

更新2:我的项目中使用的测试代码

我的型号:

class MyTestModel(models.Model):
    name = models.CharField(max_length=127,error_messages={'blank' : 'BLANK','required' : 'REQUIRED'})
Run Code Online (Sandbox Code Playgroud)

我的表格:

class EditTestModel(ModelForm):
    class Meta:
        model = MyTestModel
Run Code Online (Sandbox Code Playgroud)

我的看法:

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>
Run Code Online (Sandbox Code Playgroud)

Yuj*_*ita 5

你没错,那些文档不是很有用.毕竟这是最近添加的!

我的猜测是error_messages的正常用法是针对ModelForms的,所以我在这里查看每个字段可接受的错误键列表:http://docs.djangoproject.com/en/dev/ref/forms/fields/#错误信息

但是,如果你想要真正安全而不假设任何事情......

现在最可靠的方法是查看源代码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.'),
    }
Run Code Online (Sandbox Code Playgroud)

这是关于模型验证的文档: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']}
Run Code Online (Sandbox Code Playgroud)