我在尝试一个选择有限的领域:
Action_Types=(
('0','foo'),
('1','bar'),
)
class Foo(models.Model):
myAction=models.CharField(max_length=1,choices=Action_Types)
def __unicode__(self):
return '%d %s'%(self.pk,self.myAction)
然而,当我试图插入违反规则的内容时,它成功了,没有任何错误或警告消息(使用“manage.py shell”)。似乎任何长度的任何文本都可以放入此字段。我使用SQLite3作为后端。
应该是这样吗?
1条答案
按热度按时间tjjdgumg1#
SQLite不强制执行VARCHAR的长度。
SQLite常见问题解答:
(9)SQLite中VARCHAR的最大大小是多少?
SQLite并不强制VARCHAR的长度,你可以声明一个VARCHAR(10),SQLite会很乐意让你在其中放入500个字符,并且它会保持所有500个字符的完整性--它从不截断。
如果你使用django admin或model表单更新数据库,Django会为你做长度验证,在shell中,你可以在保存之前手动调用
full_clean
,并捕获验证错误。