为什么在Django中unmanaged model不计算id ?



我在Django中有一个非托管模型:

class Person(models.Person):

name = models.CharField(max_length=200)
class Meta:
managed = False
db_table = '"public"."person"'

在我的测试中,我尝试在DB中创建一个Person条目:

person = Person(name="Ariel")
person.save()

但是我得到一个错误:

django.db.utils.IntegrityError: null value in column "id" of relation "person" violates not-null constraint
DETAIL:  Failing row contains (null, Ariel).

在测试之外,一切正常。在测试中,我通过加载模式转储,用非托管对象引用的表初始化DB。

Django文档声明"不会对这个模型执行数据库表的创建、修改或删除操作",并且"模型处理的所有其他方面都与正常情况完全相同",包括"如果你没有声明它,就自动向模型添加一个主键字段"。但这不意味着这段代码应该可以工作吗?为什么Django和Postgres不关心id?我做错了什么吗?我该怎么修理它?

当然,你的问题是,在你的PostgreSQL表中,id不是一个自动增量字段,默认为空。

在Django上使用非托管模型时,这是一个很常见的问题。你需要覆盖你正在使用的表的每一个方面。

相关内容