Tugqi Biz
  • Home
  • Categories
  • Tags
  • Archives

Django Validators

之前没用过Validators
这回入了门,用了一下,很爽~~


Django Validators

正如django文档所说:我们可以自己新建各种Validators,如:¶
from django.core.exceptions import ValidationError

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError('%s is not an even number' % value)

You can add this to a model field via the field’s validators argument:

from django.db import models

class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])

神奇点在于,django自动帮我们抓取‘值’当作参数传入我们的Validators(有点像让人讨厌的黑魔术,但不是~~)

同一个Validators也可以用于form,因为model和form相应的机理是一样的¶
from django import forms

class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even])

不过,多数时候我们喜欢用内置的Validators,也就是官网说的Built-in validators¶

用法如下:

from django.core.validators import MinLengthValidator
from django.db import models

class MyModel(models.Model):
    even_field = models.TextField(validators=[MinLengthValidator(20)])

以上所用MinLengthValidator网名生意:max_length的反意思。
还有很多内置Validator,看官网

假如我想改一下内置 Validator的错误提示,可以这么干:¶

1.自己写一个子类,覆盖message

from django.core.validators import MinLengthValidator
from django.db import models

class MyMinLengthValidator(MinLengthValidator):
    message = "少年, 至少输入%(limit_value)d个字符 ,(你怎么只输入 %(show_value)d个字符就完事儿啊)."

class MyModel(models.Model):
    even_field = models.TextField(validators=[MinLengthValidator(20)])
  1. 当然,这种方法很简单,很常见,不够高大上:填写error_messages选项
....
my_field = forms.CharField(validators=[MinLengthValidator(8)],
                           error_messages={"min_length":"少年, 至少输入%(limit_value)d个字符 ,(你怎么只输入 %(show_value)d个字符就完事儿啊)."})
})
..  . ..

  • « I am just Testing
  • Django 数据查询 »

Published

Sep 7, 2014

Category

It

Tags

  • Django 23
  • Powered by Pelican. Theme: Elegant by Talha Mansoor