Документация Django вполне понятна для хранения пустых строк как "", а не NULL на уровне базы данных (поэтому существует только один возможный формат для пустых данных):
Обратите внимание, что пустые значения строки всегда будут храниться как пустые строки, а не как NULL. Используйте только null = True для нестрочных полей, таких как целые числа, логические значения и даты. Для обоих типов полей вам также необходимо установить blank = True, если вы хотите разрешить пустые значения в формах, поскольку нулевой параметр влияет только на хранилище базы данных (см. Пробел).
Тем не менее, после добавления нового поля, я начал сталкиваться с IntegrityErrors в новом поле (номер телефона).
Значение null в столбце "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 в этой колонке.
Спасибо!