model.CharField('blank = False')是否与save()一起使用?

时间:2009-09-17 01:35:24

标签: django django-models

我有一个像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)创建一个新记录似乎很高兴。

我注意到,通过管理界面,保存确实失败,并且“需要此字段”。

问题是:

  1. “空白”属性仅由表单应用吗?
  2. 修复是否覆盖save()方法并显式检查len(name)!= 0?
  3. 我误解了曾经理解的东西可以解决我的误解吗?

2 个答案:

答案 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()