47

据我了解,当您使用 PostgreSQL 数据库时,您应该始终将 a用于可变长度字符串,因为 a和 aTextField之间的速度差异在PostgreSQL 中可以忽略不计。我对 Django 比较陌生,并且正在考虑在我的数据库中使用可变长度 url。我想知道使用它是否有任何优势?使用 a而不是 a for url会被认为是不好的形式吗?TextFieldCharFieldTextFieldURLFieldTextFieldURLField

4

3 回答 3

70

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

from django.core.validators import URLValidator

# in model
field = models.TextField(validators=[URLValidator()])

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

于 2012-04-07T06:20:42.563 回答
4

试试这个类:

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)
于 2013-08-12T04:40:31.013 回答
3

https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield 当然,您可以使用 CharField/TextField 但处理用户输入并确保用户输入的内容取决于您。

从源代码:

# 与 CharField 一样,这将导致执行 URL 验证

如果您查看URLField 源代码,您会发现它实际上是一个带有 URL 验证器的 CharField。

还有其他现成可用的字段,例如 EmailField、ImageField、*Field!

于 2012-04-07T06:39:25.863 回答