Django的文档说:Django的CharField不默认为空字符串
避免使用空的基于字符串的领域,如CharField和 文本字段,因为空字符串值总是会被存储为空 字符串,而不是空值。
所以我建立我的模型像
class Address(models.Model):
address_num = models.TextField()
street_predir = models.CharField(max_length=2, default='') # optional
street_name = models.TextField()
street_suffix = models.CharField(max_length=4, default='') # optional
street_postdir = models.CharField(max_length=2, default='') # optional
,然后创建一个缺少可选字段
raw_address = '1234 MAIN ST'
# Run this through an address parser - this returns a dictionary of address components
# Optional fields are returned as None if not present
components = parser.parse(raw_address)
address = Address(**components)
address.save()
的对象,但我得到的错误
null value in column "street_predir" violates not-null constraint
DETAIL: Failing row contains (8633570, 2057 ANCHOR ST, 2057, null, ANCHOR, ST, null, null, null, ANCHOR ST, null, null,)
任何人都可以解释为什么这不是默认为空的条纹NG? FWIW我正在使用Django 1.7.4和Postgres DB。
不需要'default =''',你应该使用'blank = True'来允许表单中的空值。你可以发布traceback和可能的内容'from django.db import connection;打印(connection.queries)'? – knbk 2015-03-30 18:04:14
您还可以发布创建对象的代码或任何自定义保存方法吗?某处,你明确地设置了'None'而不是一个空字符串。 – knbk 2015-03-30 18:17:45