Ответ
Для хранения URL-адресов в моделях Django следует использовать models.URLField.
Это специализированный подкласс CharField, который предоставляет встроенную валидацию формата URL.
Почему URLField — лучший выбор:
- Автоматическая валидация: При сохранении формы (
ModelForm) или при вызове методаfull_clean()на экземпляре модели Django автоматически проверяет, является ли значение корректным URL. - Семантическая ясность: Использование
URLFieldделает код более читаемым и понятным, явно указывая на предназначение поля. - Оптимальное хранение: В базе данных это поле представляется как
VARCHAR(по умолчаниюmax_length=200), что является эффективным способом хранения URL.
Пример использования:
from django.db import models
class Profile(models.Model):
user = models.OneToOneField('auth.User', on_delete=models.CASCADE)
# Поле для хранения ссылки на сайт пользователя
website = models.URLField(max_length=255, blank=True, null=True)
# Поле для LinkedIn, обязательное
linkedin_url = models.URLField(max_length=255)
Хотя для хранения URL можно использовать и обычный CharField, URLField является предпочтительным решением благодаря встроенной валидации и семантической точности.
Ответ 18+ 🔞
А, ну ты глянь, опять про эти ваши поля в Джанге. Слушай, тут всё просто, как три копейки, но народ умудряется накосячить, будто в первый раз в жизни видит ссылку, ёпта.
В общем, если тебе надо запихнуть в модель какую-нибудь ссылку — сайт, профиль, фотку котика — не выдумывай велосипед. Бери models.URLField и спи спокойно.
А че он такой особенный, этот твой URLField?
Да потому что он не просто строка, а строка с претензией, блядь! У него внутри уже вшита проверка, чтобы какой-нибудь распиздяй не сунул туда "абы как" или "хрень-пыхрень.ком". При сохранении через форму или когда модель чистишь (full_clean()), Джанга сама скажет: "Э, дружок-пирожок, это не ссылка, это пиздец какой-то".
- Умный, сука: Сам всё проверит, тебе голову не морочит.
- Понятный, как божий день: Глянешь на код — сразу ясно, что тут лежит ссылка, а не стихи про любовь.
- В базе — обычная строка: Ничего лишнего, просто
VARCHAR, обычно на 200 символов. Хочешь больше — укажиmax_lengthсам, не стесняйся.
Смотри, как это выглядит в деле:
from django.db import models
class Profile(models.Model):
user = models.OneToOneField('auth.User', on_delete=models.CASCADE)
# Сайт человека. Пусть будет, а может и нет — поэтому blank и null.
website = models.URLField(max_length=255, blank=True, null=True)
# А вот линкедин — это серьёзно, блядь. Пусть заполняет обязательно.
linkedin_url = models.URLField(max_length=255)
Конечно, можно и в обычный CharField запихнуть, никто не запрещает. Но зачем, если есть специальный инструмент, который ещё и подстрахует? Это как забивать гвоздь микроскопом — вроде и получится, но все вокруг охуеют от твоей изобретательности. Не усложняй, используй URLField и живи без нервотрёпки.