【问题标题】:Django Column 'id' cannot be nullDjango 列“id”不能为空
【发布时间】:2011-08-12 09:14:24
【问题描述】:

我的 mysql 数据库和 django 有一个奇怪的问题。

我使用从现有数据库中导入的模型创建了一个应用程序,该模型使用 inspectdb。它工作正常,直到昨天我删除了 django 自动创建的表(django_、auth_、site_*)。我这样做是因为当我在已安装的应用程序中添加我的应用程序时,它会阻止我的模型进行验证。

今天我尝试在我的数据库中插入一条新记录,但出现以下错误:

Django Version:     1.3
Exception Type:     IntegrityError
Exception Value: (1048, "Column 'asset_id' cannot be null")

该字段是一个主键,它应该是 auto_increment 所以我在创建新记录时不给它一个值。

有人能告诉我这里发生了什么吗?

编辑:我部分地发现了问题:不知何故,我所有的 auto_increment 属性都从我的数据库中删除了。这是怎么发生的?

【问题讨论】:

  • 我对mysql数据库结构了解不多,但我猜你是直接从数据库中删除表,所以你可能不小心删除了一个跟踪唯一键id序列的mysql表……所以更好你检查你 DBMS 结构的完整性......
  • 好吧,我从头开始重建了我的数据库,所以现在可以了。从现在开始我不会再删除任何表格了!
  • 这与您之前的问题有关...您不应该删除 tables,而是 django 为您生成的 models inspectdb。这些表是为了支持 django 自己的模型。缺失的一点是,如果任何其他模型对 django 模型有 FK,您就会将引用从“已检查”模型更改为“django”模型(导入等)
  • 我实际上只删除了模型..
  • "Column 'asset_id' cannot be null" -- 这听起来不像是带有 auto_increment 的 PK ......这听起来像一个外键字段,在你的数据库中不允许为 NULL,但不知何故您已经导入了一个为 NULL 的行。

标签: django django-models django-database


【解决方案1】:

检查您生成的模型,并确保“auto_increment”列与标有primary_key=True 选项的字段相对应。

【讨论】:

    【解决方案2】:

    在获取id 属性之前,您可能需要保存对象模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2016-09-06
      • 2018-10-13
      • 2016-02-24
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多