django 模型 CharField:max_length 不起作用?
Posted
技术标签:
【中文标题】django 模型 CharField:max_length 不起作用?【英文标题】:django model CharField: max_length does not work? 【发布时间】:2012-01-18 16:01:23 【问题描述】:我正在尝试创建一个选择有限的字段:
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】:SQLite 不强制 VARCHAR 的长度。
来自SQLite Frequently asked questions:
(9) SQLite 中 VARCHAR 的最大大小是多少?
SQLite 不强制 VARCHAR 的长度。您可以声明一个 VARCHAR(10),SQLite 很乐意让您在其中放入 500 个字符。并且它将保持所有 500 个字符的完整性 - 它永远不会被截断。
如果您使用 django 管理员或模型表单更新数据库,Django 将为您进行长度验证。在shell中,您可以在保存之前手动调用full_clean
,并捕获验证错误。
f = Foo(myAction="more than 1 char")
try:
f.full_clean()
f.save()
except ValidationError as e:
# Do something based on the errors contained in e.message_dict.
【讨论】:
感谢您的回答,阿拉斯代尔!似乎唯一检查正确性的地方是使用 full_clean()。以上是关于django 模型 CharField:max_length 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章