从遗留数据库加载数据后,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 作为主键。