我有一个像Django 1.1这样的模型:
class Booking(models.Model):
name = models.CharField(max_length=100)
默认情况下,我读到'null'和'blank'都是False。
所以通过这样的测试......
class SimpleTest(TestCase):
def test_booking_save(self):
b = Booking()
b.save()
...我希望save能抛出异常。但事实并非如此。使用空白名称(Postgres和SQLite3)创建一个新记录似乎很高兴。
我注意到,通过管理界面,保存确实失败,并且“需要此字段”。
问题是:
答案 0 :(得分:5)
更新:请参阅最近的Django版本中的model validation documentation。
原始回答:blank=True/False only applies to forms。数据验证目前仅在表单级别进行;当model-validation Google Summer of Code work合并到主干时,这会发生变化。
目前在模型层发生的唯一一种验证是,如果数据库后端无法处理它所获得的内容,那么它将引发的任何错误。在空CharField的情况下,您通常不会从数据库中获取错误,因为Django默认情况下将字段设置为空字符串。
现在,您应该使用save()方法进行所需的任何模型级验证。很快(如果你在主干上)或1.2出来时,请使用模型验证。
答案 1 :(得分:1)
来自Django Docs:
“请注意,空字符串值将始终存储为空字符串,而不是NULL。仅对非字符串字段(如整数,布尔值和日期)使用null = True。”
您的代码存储空字符串。
为了说明这一点,请尝试:
class SimpleTest(TestCase):
def test_booking_save(self):
b = Booking()
b.name = None
b.save()