При создании модели в 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 проверит, что поле не пустое, прежде чем сохранить значение в базу данных.
Теперь рассмотрим, что происходит в разных комбинациях этих параметров.
- null=True only. Поле может быть пустым в базе данных, но при попытке сохранить пустое значение через форму Django выдаст ошибку валидации.
- blank=True only. Поле может быть пустым в форме, но при попытке сохранить пустое значение в базу данных будет ошибка, так как по умолчанию все поля в базе данных не могут быть
NULL
. - null=True и blank=True. Поле может быть пустым как в форме, так и в базе данных.
Нужно отметить, что в разных типах полей эти параметры могут вести себя по-разному. Например, для полей типа CharField
и TextField
, если значение NULL
сохранить в базу данных, Django преобразует его в пустую строку. А вот для ForeignKey
и ManyToManyField
значение NULL
в базе данных будет означать отсутствие связи.
В целом, выбор между этими параметрами зависит от конкретной задачи. Можно использовать null=True
, если в базе данных допустимы пустые значения, blank=True
, если допустимы пустые значения в формах, и оба вместе, если допустимы пустые значения и там, и там.
Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.
Добавить комментарий