link = models.URLField(max_length=500, blank=True, default='')
我已经将max_length设置为500,但每次我尝试使用大于200个字符的url设置此字段时,它仍然会抛出一个错误,指出Ensure this value has at most 200 characters (it has 327).
这是Django限制还是我忘记了设置?
答案 0 :(得分:6)
您忘记了实际更新/迁移数据库。这应该在初始syncdb
时发生,理想情况是通过使用Django版本中的django-south到1.6的正确数据库迁移,或者使用新的Django迁移框架在Django 1.7 +中发布。
出于开发目的,您可以重置数据库(这将删除所有数据!)并重新创建:
$ ./manage.py reset appname
$ ./manage.py syncdb
如果您正在使用南迁移:
$ ./manage.py schemamigration --auto appname
$ ./manage.py syncdb --migrate
答案 1 :(得分:0)
我想问题现在已经解决了,但我上周遇到了同样的问题。虽然有关迁移的答案是正确的,但值得注意的是URLField
基于CharField
。这意味着CharField
的长度限制也适用于URLField
,无论您定义的max_length
(另请参阅https://docs.djangoproject.com/en/1.9/ref/models/fields/#urlfield - 对于Django 1.9,这是最新版本,但多年来都没有改变。
与原始问题有点无关,但即使您使用默认max_length=200
也可能出现问题,这是MySQL目前处理UTF-8文本的方式。您可以在https://serversforhackers.com/mysql-utf8-and-indexing或http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-upgrading.html上的MySQL 5.7手册中找到有关此VARCHAR()
索引问题的更多信息。
在Advantages to using URLField over TextField?中发布了一个可能的更长URLField
的解决方案 - 只需使用相关验证程序定义文本字段。