首页 > 解决方案 > 为什么非托管模型不计算 Django 中的 id?

问题描述

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

class Person(models.Person):
    
    name = models.CharField(max_length=200)

    class Meta:
        managed = False
        db_table = '"public"."person"'

在我的测试中,我尝试在数据库中创建一个 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).

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

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

标签: djangopostgresql

解决方案


当然,您遇到的问题是在您的 PostgreSQL 表中,id它不是自动增量字段,默认情况下它为空。

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


推荐阅读