-
null=True
-
blank=True
-
default = 0
Какая разница? Когда вы используете что?
null=True
blank=True
default = 0
Какая разница? Когда вы используете что?
Непосредственно из ссылки на поле модели Django:
Field.null
Если
True
, Django будет хранить пустые значения какNULL
в базе данных. По умолчанию установлено значениеFalse
.Обратите внимание, что пустые строковые значения всегда будут храниться как пустые строки, а не как
NULL
. Используйтеnull=True
только для нестроковых полей, таких как целые числа, логические значения и даты. Для обоих типов полей вам также нужно установитьblank=True
, если вы хотите разрешить пустые значения в формах, поскольку параметрnull
влияет только на хранилище базы данных (см.blank
).Избегайте использования
null
в строковых полях, таких какCharField
иTextField
, если у вас нет веских причин. Если строковое поле имеетnull=True
, это означает, что у него есть два возможных значения для "без данных": NULL и пустая строка. В большинстве случаев избыточно иметь два возможных значения для "нет данных"; Соглашение Django - использовать пустую строку, а неNULL
.
& # 32;
Field.blank
Если
True
, поле может быть пустым. По умолчанию установлено значениеFalse
.Обратите внимание, что это отличается от
null
.null
связан исключительно с базой данных, тогда какblank
связан с проверкой. Если поле имеетblank=True
, проверка на сайте администратора Djangos позволит ввести пустое значение. Если поле имеетblank=False
, поле будет обязательным.
& # 32;
Field.default
Значение по умолчанию для поля. Это может быть значение или вызываемый объект. Если он вызывается, он будет вызываться каждый раз, когда создается новый объект.
От docs:
null
Если True, Django будет хранить пустой значения как NULL в базе данных. По умолчанию False.
blank
Если True, поле разрешено быть пустым. По умолчанию False.
default
Значение по умолчанию для поле.
Вы можете использовать "default
", чтобы установить значение, которое будет использоваться для соответствующего поля, если ваш код явно не установил его в значение.
Используйте "blank
" для целей проверки формы - blank = True позволит установить поле в пустое значение
Используйте "null
", если вы хотите сохранить пустое значение как "null" в БД. Тем не менее, он предпочел, однако, установить пустые значения в пустую строку или на 0, как это необходимо для данного поля.
Я знаю, что у вас уже есть свой ответ, однако до сегодняшнего дня трудно судить, ставить ли в поле значение null=True
или blank=True
или both
. Лично я считаю, что предоставлять разработчикам так много вариантов - бесполезно и запутанно. Позвольте ручке нули или пробелы, как они хотят.
В терминах реализации:
Поле 'blank' соответствует всем формам. Указывает, требуется ли это значение в форме и выполняется соответствующая проверка формы. "True" допускает пустые значения.
Поле "null" соответствует уровню DB. Он будет установлен как NULL или NOT NULL в БД.
Следовательно, если оставить поле пустым в admin с пустым = истинным, NULL будет загружаться в БД. Теперь это может вызвать ошибку, если этот конкретный столбец в БД указан как NOT NULL.
Null: это связано с базой данных. Определяет, будет ли данный столбец базы данных принимать нулевые значения или нет.
Пробел: это связано с проверкой. Он будет использоваться во время проверки форм при вызове form.is_valid().
По умолчанию: All Time сохраняет в поле заданное значение (значение по умолчанию), если не указано никакого значения для этого поля.
Значения по умолчанию null и blank - False.
При этом совершенно нормально иметь поле с null = True и пустым = False. Значение на уровне базы данных может быть NULL, но на уровне приложения это обязательное поле.
Теперь, когда большинство разработчиков ошибаются: определение null = True для строковых полей, таких как CharField и TextField. Избегайте этого. В противном случае вы получите два возможных значения для "без данных": Нет и пустая строка. Наличие двух возможных значений "нет данных" является избыточным. Соглашение Django - использовать пустую строку, а не NULL.
Null = None
Blank = ""
Default = ""
Скорее всего, это миряне.
Бланк подразумевает, что он НЕ NULL и вместо этого имеет некоторое значение, которое представляет "пустое" для этого типа данных, которое в случае строки, вероятно, является пустой строкой. Для чисел это может быть 0.