2013-08-30 47 views
1

models.py for books应用的内容。Django模型手机字段

from django.db import models 
from django.core.exceptions import ValidationError 
from django.core.validators import RegexValidator 


class Author(models.Model): 
    name = models.CharField(max_length=30, unique=True) 
    email = models.EmailField(max_length=50) 
    phone = models.IntegerField(max_length=10, unique=True, validators=[RegexValidator(regex='^\d{10}$', message='Length has to be 10', code='Invalid number')]) 
    # phone = models.IntegerField(max_length=10) 

    def __unicode__(self): 
     return self.name 

在这里的Author类,我要手机号码只接受长10位,我会用一个IntegerField如果它有一个MIN_LENGTH属性。

现在,这里是我的Django的壳

>>> from books.models import * 
>>> p = Author(name='foo', email='[email protected]', phone='962027') 
>>> p.save() 
>>> 

对于这种尝试,应该不是引发错误说手机领域是无效的(因为它不具有10位数字)?

我检查了表books_author,并添加了该行。

我在这里做错了什么?请帮忙。

+0

你没有做错任何事。但请注意,您指定了'max_length',该字段可以具有的最大长度,并且像“962027”这样的值不会违反此规则。 – Bonifacio2

+0

但它确实破坏了RegexValidator。 – Albin

回答

4

参见文档有关how validators are run,特别是:

注意验证不会自动当您保存模型运行

你需要使用表单验证,或致电p.full_clean()明确。

+0

你是说我需要在创建对象后调用p.full_clean()? – Albin

+0

你说得对。谢谢 :) – Albin