В документации Django совершенно ясно о хранении пустых строк как "", а не как NULL на уровне базы данных (поэтому существует только один возможный формат для пустых данных):
Обратите внимание, что значения пустых строк будутвсегда хранятся как пустые строки, а не как NULL.Используйте только null = True для нестроковых полей, таких как целые числа, логические значения и даты.Для обоих типов полей вам также нужно будет установить blank = True, если вы хотите разрешить пустые значения в формах, поскольку нулевой параметр влияет только на хранилище базы данных (см. Пустое).
Тем не менее, послеДобавляя новое поле, я начал сталкиваться с IntegrityErrors в новом поле (phone_number).
нулевое значение в столбце "phone_number" нарушает ненулевое ограничение
ТоМодель выглядит следующим образом с новым полем (я выполнил миграцию через юг):
class Person(models.Model):
user = models.ForeignKey(User)
description = models.TextField(blank=True)
phone_number = models.CharField(blank=True)
С тех пор (временно) я решил проблему, установив null = True для phone_number, но теперь у меня есть сотнизаписи с пустыми строками и одним значением NULL в моей базе данных.(Я также пытался добавить default = '' в поле phone_number, но я все еще видел проблемы IntegrityError.)
Раньше я всегда использовал MySQL, но в этом проекте я использую Postgres.Сгенерированная попытка вставки SQL:
'INSERT INTO "people_person" ("user_id", "description", "gender", "birthdate", "default_image_id", "zip_code", "beta_status") VALUES (%s, %s, %s, %s, %s, %s, %s) RETURNING "people_person"."id"'
.
Я ожидаю, что Django вставит пустую строку в столбец phone_number, но, похоже, это не так.делать это.Другой вещью, которую я мог бы ожидать, было бы включение Django SET DEFAULT в оператор CREATE TABLE, но это не так.Так что Postgres злится из-за NOT NULL в этом столбце.
Спасибо!