在TextField上使用URLField的优点是什么?

Hig*_*ife 41 django postgresql url performance django-models

据我所知,TextField当你使用PostgreSQL数据库时,你应该总是使用一个变长字符串,因为a TextField和a 之间的速度差异CharField可以忽略不计PostgreSQL.我是Django的新手,并且正在考虑TextField在我的数据库中使用一个可变长度的URL.我想知道使用它是否有任何好处URLField?使用TextField而不是URLField网址会被视为不良形式吗?

okm*_*okm 61

URLField实际上是CharField,支持基于Regexp的URL模式检查和在线验证器(由基于RegEx的验证器替换),如果不关心URL的长度限制,可以使用TextField

from django.core.validators import URLValidator

# in model
field = models.TextField(validators=[URLValidator()])
Run Code Online (Sandbox Code Playgroud)

此外,使用CharField或TextField取决于您是否希望字段具有最大长度约束,以及哪种元素类型更适合编辑:textarea或input.在PostgreSQL方面,没有显着差异.

  • 为了记录,[IE无法加载超过大约2,000个字符的URL](/sf/ask/29199971/浏览器),所以你可以在`URLField`上将`max_length`设置为2000并将其称为一天. (15认同)
  • @pravin 这不是 URLField,但它以前的验证器已被弃用。验证器之前在线访问 URL 进行验证,目前已替换为正则表达式验证器来检查 URL 格式的验证。 (2认同)

Vla*_*lav 5

试试这个课程:

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)
Run Code Online (Sandbox Code Playgroud)