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