据我了解,你应该总是使用TextField
使用PostgreSQL数据库,当你因为之间的速度差为可变长度的字符串TextField
和CharField
是微不足道的PostgreSQL的。 我relativly新的Django,并使用正在考虑TextField
在我的数据库变长的URL。 我想知道是否有任何优势,使用URLField
? 难道被认为是不好的形式使用TextField
,而不是URLField
的网址吗?
Answer 1:
URLField实际上是CharField基于W /正则表达式的URL模式检查和在线验证(这是由一个基于正则表达式替换验证),你可以使用文本字段,如果你不介意的URL的长度,限制支持
from django.core.validators import URLValidator
# in model
field = models.TextField(validators=[URLValidator()])
此外,使用CharField或文本字段的依赖于是否希望在字段最大长度约束,并且其元素类型是更适合于编辑:文本区域或输入。 PostgreSQL的一面,没有显著差异。
Answer 2:
https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield当然你也可以使用CharField /文本字段,但处理用户输入,并确保无论用户输入是上你。
从源代码:
#与CharField,这将导致执行URL验证
如果你看到URLField源代码,你会发现它实际上是用URL验证一个CharField。
也有其他准备使用领域,如EmailField,ImageField的,*场!
Answer 3:
试试这个类:
class LongURLField(TextField):
description = 'Long URL'
def __init__(self, verbose_name=None, name=None, **kwargs):
TextField.__init__(self, verbose_name, name, **kwargs)
self.validators.append(validators.URLValidator())
def formfield(self, **kwargs):
# As with TextField, this will cause URL validation to be performed
# twice.
defaults = {
'form_class': forms.URLField,
}
defaults.update(kwargs)
return super(LongURLField, self).formfield(**defaults)
文章来源: Advantages to using URLField over TextField?