null=True
устанавливает NULL
(против NOT NULL
) на столбец в вашей БД. Пустые значения для типов полей Django, таких как DateTimeField
или, ForeignKey
будут сохранены как NULL
в БД.
blank
определяет, будет ли поле заполнено в формах. Это включает в себя администратора и ваши пользовательские формы. Если blank=True
тогда поле не будет обязательным, тогда как если это False
поле не может быть пустым.
Комбинация из двух так часто, потому что, как правило, если вы хотите, чтобы поле в форме было пустым, вам также понадобится база данных, чтобы разрешить NULL
значения для этого поля. Исключение составляют CharField
s и TextField
s, которые в 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
.