07 Июл 2023
2 мин
3716

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

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

Содержание

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

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

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

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, если допустимы пустые значения в формах, и оба вместе, если допустимы пустые значения и там, и там.

Содержание

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

Определи профессию по рисунку