Почему пустые и нулевые параметры для модели django?

При определении полей в модели django существует два способа сказать, что поле разрешено быть пустым. null означает, что он может быть пустым в базе данных, а blank говорит, что поле может быть пустым в форме. Почему они отличаются? Каждый раз, когда я устанавливаю одно, а не другое, что-то идет не так. Предоставление им возможности быть разными, кажется, просто приглашает проблемы формы, позволяющие создавать объекты, которые база данных не принимает.

Другими словами, когда вы когда-либо использовали null=True,blank=False или null=False,blank=True в модели django?

Ответ 1

У них есть два совершенно разных значения:

blank: определяет, должно ли поле быть проверено по мере необходимости или нет в формах. False означает, что форма будет генерировать ошибку, если не предоставить, тогда как True означает, что допустимы пустые значения.

null: определяет, должно ли поле быть установлено как NULL или NOT NULL на уровне БД. Это не имеет никакого отношения к проверке формы.

Некоторые примеры:

blank=True, null=False будет поднимать значение IntegrityError в любое время, когда поле остается пустым, если это не CharField или TextField. Эти два поля отправляют '' (пустая строка), а не NULL в БД при пустом.

blank=False, null=True всегда требовало заполнения поля во всех формах (формы будут поднимать ValidationError в поле), даже если столбцу разрешено быть NULL. Однако это относится только к формам. Вы можете вручную установить атрибут None и сохранить его вне формы (например, в оболочке).

Ответ 2

null=False, blank=True является общим для CharField s, где пустой ответ хранится в db как пустая строка, а не null. Другой способ не имеет смысла использовать.

Для нестрочных полей не-ответ сохраняется как null, поэтому вам нужны оба.