null=True
устанавливает NULL
(против NOT NULL
) для столбца в вашей БД.Пустые значения для типов полей Django, таких как DateTimeField
или ForeignKey
, будут сохранены как NULL
в БД.
blank=True
определяет, будет ли поле заполняться в формах.Это включает в себя администратора и ваши собственные пользовательские формы.Если blank=True
, то поле не будет обязательным, тогда как если оно False
, поле не может быть пустым.
Комбинация из двух так часто, потому что, как правило, если вы собираетесь разрешить полене заполняйте форму, вам также понадобится база данных, чтобы разрешить значения NULL
для этого поля.Исключение составляют CharField
с и TextField
с, которые в Django никогда не сохраняются как NULL
.Пустые значения хранятся в БД в виде пустой строки (''
).
Несколько примеров:
models.DateTimeField(blank=True) # raises IntegrityError if blank
models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form
Очевидно, что эти два варианта не имеют логического смысла для использования (хотя, может быть случай использования null=True, blank=False
, если вы хотите, чтобы поле всегда было обязательным в формах, но необязательно при работе с объектом через что-то вроде оболочки.)
models.CharField(blank=True) # No problem, blank is stored as ''
models.CharField(null=True) # NULL allowed, but will never be set as NULL
CHAR
иTEXT
типы никогда не сохраняются как NULL
Django, поэтому null=True
не требуется.Однако вы можете вручную установить одно из этих полей на None
, чтобы принудительно установить его как NULL
.Если у вас есть сценарий, в котором это может быть необходимо, вы все равно должны включить null=True
.