дифференцировать нуль = True, пусто = True в Django - PullRequest
764 голосов
/ 23 декабря 2011

Когда мы добавляем поле базы данных в django, мы обычно пишем models.CharField(max_length=100, null=True, blank=True). То же самое делается с ForeignKey, DecimalField и т. Д. В чем принципиальная разница с

  1. null=True только
  2. blank=True только
  3. null=True, blank=True

относительно различных (CharField, ForeignKey, ManyToManyField, DateTimeField) полей. Каковы преимущества / недостатки использования 1/2/3?

Ответы [ 12 ]

3 голосов
/ 25 апреля 2018

Я думаю, что вы можете быть заинтересованы в Сохраняйте пустые, обнуляемые значения CharField как null, а не как пустую строку . Существует много дискуссий по этому поводу, и с очень практической проблемой вы можете столкнуться (например, вы хотите добавить URL-адрес openid для каждого пользователя, который может быть нулевым и должен быть уникальным).

3 голосов
/ 12 мая 2017

Когда мы сохраняем что-либо в админке Django, происходит двухэтапная проверка, на уровне Django и на уровне базы данных. Мы не можем сохранить текст в числовом поле.

База данных имеет тип данных NULL, это ничего. Когда Django создает столбцы в базе данных, он указывает, что они не могут быть пустыми. И если вы попытаетесь сохранить NULL, вы получите ошибку базы данных.

Также на уровне Django-Admin все поля обязательны для заполнения по умолчанию, вы не можете сохранить пустое поле, Django выдаст вам ошибку.

Итак, если вы хотите сохранить пустое поле, вам нужно разрешить его на уровне Django и Database. blank = True - разрешит пустое поле в админ-панели null = True - позволит сохранить NULL в столбце базы данных.

...