В 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.