Django的文档有关存储空字符串为“”,而不是在数据库级别NULL(所以只有一个空的数据可能格式)相当明确:Django的ORM,CharField和空白=真
注空字符串值将始终作为空字符串存储,而不是NULL。只对非字符串字段(如整数,布尔值和日期)使用null = True。对于这两种类型的字段,如果您希望允许表单中的空值,您还需要设置blank = True,因为null参数仅影响数据库存储(请参见空白)。
尽管如此,添加新字段后,我开始在新字段(phone_number)上遇到IntegrityErrors。
列“PHONE_NUMBER”空值违反
这种模式看起来是这个新的领域(我执行经由南部迁移)非空约束:
class Person(models.Model):
user = models.ForeignKey(User)
description = models.TextField(blank=True)
phone_number = models.CharField(blank=True)
我自从(暂时)通过在phone_number上设置null = True解决了这个问题,但现在我有数百个空字符串的条目,并且在我的数据库中有一个NULL值。 (我也尝试在phone_number字段中添加default ='',但我仍然看到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在CREATE TABLE语句中包含SET DEFAULT,但它不包含。所以Postgres对那列的NOT NULL感到愤怒。
谢谢!
同样的事情似乎发生如果你传递一个'None'给构造函数(所以,在创建时) –