从遗留数据库加载数据后,Django ORM 无法自动设置模型的主键
Django ORM cannot auto set primary key for model after loading data from legacy db
我正在处理一个新的 Django 项目,该项目需要从遗留数据库加载数据,但是在我从遗留数据库加载数据后,保存新模型对象总是失败 IntegrityError: null value in column "id" violates not-null constraint
。
遗留数据库中的主键在 10000 到 200000 之间,新数据库是 Postgres 9.5 并且从未在其上手动设置 SQL 架构。
我的模型可以像这样简单:
class MyModel(Model):
id = IntegerField(primary_key=True)
当我 运行 MyModel().save()
或 MyModel.create()
时,这将失败。可以运行 MyModel(id=233).save()
就像我加载数据时用的那样。
我猜是因为它不知道从哪里开始自动生成主键。如何解决这个问题?
要在django中添加一个自增字段,你应该使用AutoField
您应该像这样定义 id
字段:
id = models.AutoField(primary_key=True)
如果你想将它命名为id
,你不需要定义字段,django 会为你做。
没有显式 id
字段的模型仍将有一个 AutoField id
作为主键。
我正在处理一个新的 Django 项目,该项目需要从遗留数据库加载数据,但是在我从遗留数据库加载数据后,保存新模型对象总是失败 IntegrityError: null value in column "id" violates not-null constraint
。
遗留数据库中的主键在 10000 到 200000 之间,新数据库是 Postgres 9.5 并且从未在其上手动设置 SQL 架构。
我的模型可以像这样简单:
class MyModel(Model):
id = IntegerField(primary_key=True)
当我 运行 MyModel().save()
或 MyModel.create()
时,这将失败。可以运行 MyModel(id=233).save()
就像我加载数据时用的那样。
我猜是因为它不知道从哪里开始自动生成主键。如何解决这个问题?
要在django中添加一个自增字段,你应该使用AutoField
您应该像这样定义 id
字段:
id = models.AutoField(primary_key=True)
如果你想将它命名为id
,你不需要定义字段,django 会为你做。
没有显式 id
字段的模型仍将有一个 AutoField id
作为主键。