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типи ніколи не зберігаються, як NULLDjango, тому null=Trueце зайве. Однак ви можете вручну встановити одне з цих полів, Noneщоб змусити його встановити як NULL. Якщо у вас є сценарій, де це може знадобитися, ви все одно повинні включити його null=True.