Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django型号CharField:最大长度不起作用?_Django_Sqlite_Model_Choice_Maxlength - Fatal编程技术网

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()。