Django模型接受定义为NOT NULL的字段的空值

时间:2011-01-03 12:07:53

标签: django django-models

编辑:我在3-4周后再次尝试了这个,我没有再遇到这个问题。我不知道为什么。当我第一次遇到这个问题时,我很惊讶Django没有抛出任何NOT NULL约束。但现在,当我在3-4周后再次尝试它时,它运行正常。我不确定原因。

无论如何,这个问题不再有效。

我是Django新手。

我的模型有一个类,其中有几个字段被定义为NOT NULL。

class Post(models.Model):
    title = models.CharField(max_length=60)
    create_date=models.DateField(verbose_name='created Date')

当我转到命令行(通过manage.py shell),并通过执行以下操作创建一个新的Post实例时,Django将条目保存到数据库:

p=Post(title='test')
p.save()

为什么它不会像我在Admin面板中尝试相同时那样抛出错误?

1 个答案:

答案 0 :(得分:2)

几个问题

  1. 您使用的是什么版本的django?
  2. 您使用的是哪个数据库?
  3. 如果您在通过shell保存create_date数据库中的内容后查看数据库记录?
  4. 如果查看数据库中表的模式定义,它是否允许create_date为空?是否有默认设置?
  5. 我还没有机会尝试使用此代码,但这是我猜测发生了什么。

    django管理员正在使用表单验证来阻止您保存并向您提供错误。

    当你使用shell时,模型没有验证,所以它允许你保存,它依靠数据库来捕获可空数据的问题。我的猜测是你的数据库允许这个值为null并且没有抛出错误,因此它允许你保存没有问题。

    在Django 1.2中,他们添加了与表单验证器类似的模型验证器,请查看此链接以获取更多信息。

    http://docs.djangoproject.com/en/1.2/ref/models/instances/#validating-objects

    我再一次在这里猜测,因为我不知道上述问题的答案。如果你能得到我的答案,我应该能给你一个更好的答案。