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
.