Django:ForeignKey 的值可以是 None 吗?

Posted

技术标签:

【中文标题】Django:ForeignKey 的值可以是 None 吗?【英文标题】:Django: Can the value of ForeignKey be None? 【发布时间】:2011-01-13 23:14:04 【问题描述】:

我有一个名为 SimplePage 的模型,其中有这行:

category = models.ForeignKey('Category', related_name='items',
                             blank=True, null=True)

我认为这将允许我拥有没有类别的 SimplePage 实例。

但由于某种原因,当我尝试在管理员中创建一个没有类别的 SimplePage 时,我得到:

IntegrityError at /admin/sitehelpers/simplepage/add/
sitehelpers_simplepage.category_id may not be NULL

这是什么?

【问题讨论】:

【参考方案1】:

可能是您在为该模型执行syncdb 之后添加了null=True 属性? Django 不会更改数据库表,只会创建它们。如果该列允许NULL,请检查您的数据库并手动更改它。

编辑:从 Django 1.7 开始,这个答案和 cmets 不再有效,因为 Django 获得了功能齐全的 migration framework。

【讨论】:

记住孩子们:Django 只会创建不存在的表或列。它永远不会为你改变一张桌子。任何反映模型更改所需的表更改都必须由您手动完成! 我实际上运行了 syncdb 并没有帮助。有效的方法是删除数据库,然后执行同步数据库。 @cool-RR,synack 关于syncdb 创建但不修改表的评论让你很吃惊。 我希望 syncdb 对此给出警告。 那里是不是说syncdb不会给出警告?

以上是关于Django:ForeignKey 的值可以是 None 吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以访问由 ForeignKey Django 连接的不同表的值

Django:如何向后跟随 ForeignKey('self')

django model中foreignKey的self怎么理解?

django ForeignKey 到任何类型的模型

Django 使用注释更新查询集

Django 使用 ForeignKey 形成单元测试