Django的URLField最大长度固定为200字符

12 投票
2 回答
13533 浏览
提问于 2025-04-18 03:19
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

撰写回答