sqlite django模型字符域:max_length不起作用?

kd3sttzy  于 2023-01-05  发布在  SQLite
关注(0)|答案(1)|浏览(132)

我在尝试一个选择有限的领域:

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作为后端。
应该是这样吗?

tjjdgumg

tjjdgumg1#

SQLite不强制执行VARCHAR的长度。
SQLite常见问题解答:

(9)SQLite中VARCHAR的最大大小是多少?

SQLite并不强制VARCHAR的长度,你可以声明一个VARCHAR(10),SQLite会很乐意让你在其中放入500个字符,并且它会保持所有500个字符的完整性--它从不截断。
如果你使用django admin或model表单更新数据库,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.

相关问题