2013-08-30 190 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