django型号CharField:最大长度不起作用?
我正在尝试创建一个选择有限的字段:django型号CharField:最大长度不起作用?,django,sqlite,model,choice,maxlength,Django,Sqlite,Model,Choice,Maxlength,我正在尝试创建一个选择有限的字段: 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
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作为后端
应该是这样吗?或者如果我遗漏了什么?SQLite不强制执行VARCHAR的长度 从: (9)SQLite中VARCHAR的最大大小是多少?
SQLite不强制执行VARCHAR的长度。您可以声明一个VARCHAR(10),SQLite将很乐意让您在其中输入500个字符。它将保持所有500个字符的完整性-它从不截断 如果使用django管理或模型表单更新数据库,django将为您执行长度验证。在shell中,您可以在保存之前手动调用,并捕获验证错误
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()。