django - 为什么非托管模型不计算 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?难道我做错了什么?我该如何解决?
解决方案
当然,您遇到的问题是在您的 PostgreSQL 表中,id
它不是自动增量字段,默认情况下它为空。
在 Django 上使用非托管模型时,这是一个很常见的问题。您需要涵盖正在使用的表格的每个方面。
推荐阅读
- bash - 如何将 bash 命令的输出传递给 Github Action 参数
- java - 安卓俄罗斯方块(鬼片/影片)
- r - 条形图制动轴值上的对数刻度
- python - 将张量列表转换为张量的张量
- javascript - 将值从 Jsp 传递到 Javascript 的问题
- flutter - 如何在构建方法中处理文本小部件的空数组?
- python - 导入时错误无法从“werkzeug”导入名称“cached_property”[`from werkzeug.utils import cached_property`]
- javascript - 对象作为 React 子对象无效(找到:带有键 {weight} 的对象)。如果您打算渲染一组孩子,请改用数组
- javascript - ReferenceError:$ 未在 /code.js 10:1 中定义
- linux - 如何配置 vscode 以使用与 WSL 相同的 (linux) 文件路径格式?