В Django models.py, какова разница между умолчанием, нулем и пробелом?
-
null=True
-
blank=True
-
default = 0
Какая разница? Когда вы используете что?
Ответы
Ответ 1
Непосредственно из ссылки на поле модели 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
Значение по умолчанию для поля. Это может быть значение или вызываемый объект. Если он вызывается, он будет вызываться каждый раз, когда создается новый объект.
Ответ 2
От docs:
null
Если True, Django будет хранить пустой значения как NULL в базе данных. По умолчанию False.
blank
Если True, поле разрешено быть пустым. По умолчанию False.
default
Значение по умолчанию для поле.
Вы можете использовать "default
", чтобы установить значение, которое будет использоваться для соответствующего поля, если ваш код явно не установил его в значение.
Используйте "blank
" для целей проверки формы - blank = True позволит установить поле в пустое значение
Используйте "null
", если вы хотите сохранить пустое значение как "null" в БД. Тем не менее, он предпочел, однако, установить пустые значения в пустую строку или на 0, как это необходимо для данного поля.
Ответ 3
Я знаю, что у вас уже есть свой ответ, однако до сегодняшнего дня трудно судить, ставить ли в поле значение null=True
или blank=True
или both
. Лично я считаю, что предоставлять разработчикам так много вариантов - бесполезно и запутанно. Позвольте ручке нули или пробелы, как они хотят.
Я следую за этой таблицей: ![When to use null and blank]()
![When to use null and blank]()
Ответ 4
В терминах реализации:
Поле 'blank' соответствует всем формам. Указывает, требуется ли это значение в форме и выполняется соответствующая проверка формы.
"True" допускает пустые значения.
Поле "null" соответствует уровню DB. Он будет установлен как NULL или NOT NULL в БД.
Следовательно, если оставить поле пустым в admin с пустым = истинным, NULL будет загружаться в БД. Теперь это может вызвать ошибку, если этот конкретный столбец в БД указан как NOT NULL.
Ответ 5
Null: это связано с базой данных. Определяет, будет ли данный столбец базы данных принимать нулевые значения или нет.
Пробел: это связано с проверкой. Он будет использоваться во время проверки форм при вызове form.is_valid().
По умолчанию: All Time сохраняет в поле заданное значение (значение по умолчанию), если не указано никакого значения для этого поля.
Значения по умолчанию null и blank - False.
При этом совершенно нормально иметь поле с null = True и пустым = False. Значение на уровне базы данных может быть NULL, но на уровне приложения это обязательное поле.
Теперь, когда большинство разработчиков ошибаются: определение null = True для строковых полей, таких как CharField и TextField. Избегайте этого. В противном случае вы получите два возможных значения для "без данных": Нет и пустая строка. Наличие двух возможных значений "нет данных" является избыточным. Соглашение Django - использовать пустую строку, а не NULL.
Ответ 6
Null = None
Blank = ""
Default = ""
Скорее всего, это миряне.
Бланк подразумевает, что он НЕ NULL и вместо этого имеет некоторое значение, которое представляет "пустое" для этого типа данных, которое в случае строки, вероятно, является пустой строкой. Для чисел это может быть 0.