Ответ 1
blank
опция используется в валидации формы, а null
используется при записи в базу данных.
Таким образом, вы можете добавить null=True
в это поле.
EDIT: продолжить комментарий
Рассмотрение двух шагов при сохранении объекта:
- Валидатор (управляемый
blank
) - Ограничение базы данных (контролируемое
null
)
Для опции по default
возьмите IntegerField
например, default=5, blank=True, null=False
, pass (1), даже если вы не присвоили значение (имеющее blank=True
), pass (2), потому что оно имеет значение по умолчанию (5) и записывает 5
вместо None
для БД. blank=True, null=False
, которые проходят (1), но не (2), поскольку он пытается записать None
в DB.
Таким образом, если вы хотите сделать поле необязательным, используйте либо default=SOMETHING, blank=True, null=False
либо blank=True, null=True
.
Другим исключением является строковое поле, такое как CharField
.
Он предположил, что использовать blank=True
одиночку, оставив null=False
позади.
Это делает поле строкой (> = 1 char (s)) или пустую строку ('', с len() == 0) и никогда None
.
Причина в том, что когда установлено значение null=True
, будет существовать два возможных значения для состояния "unset": пустая строка и None
, что запутывает (и может вызывать ошибки).