我喜欢Django并定期使用它。我发现它的大部分默认值都很合理,但是我总是困扰我,以至于我在每个项目上都覆盖了它。
URLField
模型字段的默认最大长度为200个字符。文档验证了这个限制,但不解释为什么会这样。
class URLField(CharField):
...
def __init__(self, verbose_name=None, name=None, **kwargs):
kwargs['max_length'] = kwargs.get('max_length', 200)
...
我覆盖它,因为大量的URL超过200个字符,尤其是查询字符串。
我理解虽然HTTP规范does not specify a maximum length,但几乎所有浏览器都支持at least 2000 characters,这对我来说是一个新的合理默认值。
很想深入挖掘,我发现第一次承诺在2007年1月添加限制(@ f6390e8
由@jacobian提供);从那时起它基本没有改变。
回过头来看,我发现了我认为代码映射字段类型的版本到ORM的数据库列类型(#f69cf70
by @adrianholovaty)。例如,MySQL的文件存在于2006年5月,自Django 0.95以来具有相同的200个字符限制:
答案 0 :(得分:3)
我不能说为什么选择原始的最大长度,你必须向作者询问你找到的补丁。请注意MySQL restricts unique var chars to 255 characters,因此选择200可以避免此问题。
选择限制后,更改它会产生向后兼容性问题。由于在Django 1.7中添加了迁移,因此更容易进行这样的更改。如果你强烈想要改变它,那么Django开发者邮件列表或票据跟踪器可能是一个比堆栈溢出更好的地方。
您可能会发现有关ticket 19515的讨论很有趣。