Django的URLField最大长度固定为200字符
link = models.URLField(max_length=500, blank=True, default='')
我已经把最大长度设置为500了,但每次我试着把这个字段的URL设置为超过200个字符的内容时,系统还是会报错,提示说 确保这个值最多有200个字符(现在有327个)。
这是Django的限制,还是我忘记设置什么了呢?
2 个回答
2
我想问题现在应该解决了,不过我上周也遇到了同样的情况。关于迁移的回答是正确的,但值得注意的是,URLField
是基于 CharField
的。这意味着 CharField
的长度限制也适用于 URLField
,无论你定义的 max_length
是多少(你可以查看 这个链接 - 这个回答提到的是 Django 1.9,当时我写的时候这是最新版本,而在2020年的 Django 3.0 中也是一样的)。
这和最初的问题有点不相关,但即使你使用默认的 max_length=200
,MySQL 目前处理 UTF-8 文本的方式也可能会造成问题。你可以在 这个链接 或者 MySQL 5.7 手册的 这个链接 中了解更多关于 VARCHAR()
索引的问题。
如果你想要一个更长的 URLField
,可以参考 这个链接,里面提到的解决方案是简单地定义一个带有相关验证器的 TextField。
7
你忘记更新或迁移你的数据库了。这个步骤应该在第一次运行 syncdb
的时候完成,最好是通过使用 django-south 这个工具来进行数据库迁移,适用于 Django 1.6 及之前的版本,或者在 Django 1.7 及之后的版本中使用新的数据库迁移框架。
如果是为了开发,你可以重置你的数据库(这会删除所有数据!)并重新创建:
$ ./manage.py reset appname
$ ./manage.py syncdb
如果你在使用 South 进行迁移:
$ ./manage.py schemamigration --auto appname
$ ./manage.py syncdb --migrate