Django URLField将max_length固定为200个字符

时间:2014-04-18 21:33:27

标签: python django

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限制还是我忘记了设置?

2 个答案:

答案 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-indexinghttp://dev.mysql.com/doc/refman/5.7/en/charset-unicode-upgrading.html上的MySQL 5.7手册中找到有关此VARCHAR()索引问题的更多信息。

Advantages to using URLField over TextField?中发布了一个可能的更长URLField的解决方案 - 只需使用相关验证程序定义文本字段。