Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
05 Июл 2023
3 мин
4861

Разница между null=True и blank=True в Django

При создании модели в Django часто встречается следующая ситуация. Нужно добавить поле, которое может быть пустым. Например, у сущности «Пользователь»

При создании модели в Django часто встречается следующая ситуация. Нужно добавить поле, которое может быть пустым. Например, у сущности «Пользователь» может быть поле «отчество», которое не является обязательным для заполнения. В этом случае в модели это поле может выглядеть так:

models.CharField(max_length=100, null=True, blank=True)

В Django для создания таких полей используются параметры null=True и blank=True. Но в чем разница между ними и когда какой использовать?

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

null=True

Параметр null=True говорит о том, что в базе данных для данного поля может быть сохранено значение NULL. Это означает, что поле может не иметь значения. Этот параметр относится непосредственно к базе данных.

blank=True

Параметр blank=True говорит о том, что поле может быть пустым в формах. Это относится к валидации данных на уровне Django, а не базы данных. Если blank=False, то Django проверит, что поле не пустое, прежде чем сохранить значение в базу данных.

Теперь рассмотрим, что происходит в разных комбинациях этих параметров.

  1. null=True only. Поле может быть пустым в базе данных, но при попытке сохранить пустое значение через форму Django выдаст ошибку валидации.
  2. blank=True only. Поле может быть пустым в форме, но при попытке сохранить пустое значение в базу данных будет ошибка, так как по умолчанию все поля в базе данных не могут быть NULL.
  3. null=True и blank=True. Поле может быть пустым как в форме, так и в базе данных.

Нужно отметить, что в разных типах полей эти параметры могут вести себя по-разному. Например, для полей типа CharField и TextField, если значение NULL сохранить в базу данных, Django преобразует его в пустую строку. А вот для ForeignKey и ManyToManyField значение NULL в базе данных будет означать отсутствие связи.

В целом, выбор между этими параметрами зависит от конкретной задачи. Можно использовать null=True, если в базе данных допустимы пустые значения, blank=True, если допустимы пустые значения в формах, и оба вместе, если допустимы пустые значения и там, и там.

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий