Django的URLField字段有一个固定的最大长度,为200个字符。

12
link = models.URLField(max_length=500, blank=True, default='')

我已经将max_length设置为500,但每次当我尝试使用长度超过200个字符的url来设置该字段时,它仍会抛出错误,显示 确保此值最多有200个字符(它有327个)。 这是Django的限制还是我忘记设置了什么?


我要检查的一件事是数据库表的列定义。200是默认长度,因此如果在增加max_length之前创建了数据库,则可能仍设置为200。 - Peter DeGlopper
2个回答

7

你忘记实际更新/迁移你的数据库了。这应该在初始的syncdb时发生,并且理想情况下应该通过一个适当的数据库迁移,使用Django 1.6及以下版本的django-south,或者使用即将发布的Django1.7+的新Django迁移框架。

为了开发目的,您可以重置您的数据库(这将删除所有数据!)并重新创建:

$ ./manage.py reset appname
$ ./manage.py syncdb

如果您正在使用South迁移:
$ ./manage.py schemamigration --auto appname
$ ./manage.py syncdb --migrate

2
我猜问题现在已经解决了,但上周我也遇到了同样的问题。虽然关于迁移的答案是正确的,但值得注意的是,URLField基于CharField。这意味着无论您定义什么max_lengthCharField的长度限制也适用于URLField(请参见https://docs.djangoproject.com/en/3.0/ref/models/fields/#urlfield - 这个答案是针对Django 1.9的,当我最初写它时,这仍然适用于2020年的Django 3.0)。
与原始问题有些不相关,但即使您使用默认的max_length=200,MySQL目前处理UTF-8文本的方式也可能存在问题。您可以在https://serversforhackers.com/mysql-utf8-and-indexing或MySQL 5.7手册中找到更多信息http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-upgrading.html
Advantages to using URLField over TextField?中发布了一个可能的解决方案,即使用相关验证器定义Textfield以获得更长的URLField

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接