Как я понимаю, вы всегда должны использовать TextField
для строки переменной длины при использовании базы данных PostgreSQL, поскольку разница в скорости между TextField
и CharField
незначительна с PostgreSQL. Я относительный новичок в Django и рассматривал возможность использования TextField
для URL-адресов переменной длины в моей базе данных. Мне было интересно, есть ли какие-либо преимущества при использовании URLField
? Будет ли считаться плохой формой использовать TextField
, а не URLField
для URL-адресов?
Преимущества использования URLField над TextField?
Ответ 1
URLField на самом деле CharField с поддержкой проверки шаблонов URL-адресов на основе Regexp и онлайн-валидатора (который бесполезен и скоро будет устаревшим), вы можете использовать TextField, если вам не важно ограничение длины URL
from django.core.validators import URLValidator
# in model
field = models.TextField(validators=[URLValidator()])
Кроме того, использование CharField или TextField зависит от того, хотите ли вы ограничить максимальную длину в поле и какой тип элемента более подходит для редактирования: textarea или input. На стороне PostgreSQL нет существенной разницы.
Ответ 2
Попробуйте этот класс:
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)
Ответ 3
https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield Конечно, вы можете использовать CharField/TextField, но обрабатывать ввод пользователя и быть уверенным, что все, что входит в ваш пользователь, зависит от вас.
Из исходного кода:
# Как и в случае с CharField, это приведет к проверке URL-адреса.
Если вы видите URLField исходный код, вы найдете его на самом деле CharField с помощью проверки URL.
Также есть другие готовые к использованию поля, такие как EmailField, ImageField, * Field!