首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否必须在Django模型中显式定义id主键,该模型是根据现有数据库从inspectdb生成的?

是否必须在Django模型中显式定义id主键,该模型是根据现有数据库从inspectdb生成的?
EN

Stack Overflow用户
提问于 2019-10-03 11:05:21
回答 2查看 2.9K关注 0票数 8

我有一个现有的MySQL数据库,其中有几个已经填充了数据的表。我用应用程序创建并配置了Django项目。Django与数据库之间的通信工作如出一辙。我使用'inspectdb‘命令生成了一个“models.py”命令来创建我的所有应用程序模型:

代码语言:javascript
复制
python manage.py inspectdb > myapp/models.py

我的问题是,我的模型中没有一个在‘model s.py’中显示任何'id‘字段。所有现有的MySQL表都将“id”列作为主键(为这些表启用了自动增量),这似乎很奇怪。

我想知道是否需要显式地在使用inspectdb创建的所有模型类中添加'id‘主键字段,或者它是否不需要(在这种情况下是隐式的)。

为什么Django模型定义中缺少“id”主键,我应该将这个字段添加到模型类中吗?

电流设置

1.4.4

  • sqlparse:

  • Python版本: 3.6.8

  • Django版本: 2.2.5

  • mysqlclient:

  • 0.3.0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-03 11:07:54

为什么

模型定义中缺少了'id'主键,我应该将这个字段添加到模型类中吗?

No..如果没有在模型中指定主键,则为。Django将自动将一个AutoField添加到名为id的模型中,正如the documentation on 中所指定的那样

默认情况下,

为每个模型提供以下字段

id = models.AutoField(primary_key=True)

这是一个自动递增的主键.

如果要指定自定义主键,请在其中一个字段上指定primary_key=True。如果Django看到您显式地设置了Field.primary_key,它将不会添加自动id列.

票数 9
EN

Stack Overflow用户

发布于 2019-10-03 12:16:53

我在这里也有同样的情况。不同之处在于,我正在从mssql数据库迁移。正如@williem所提到的,Django自动分配一个'id‘。在使用ForeignKey关系时,您更有可能得到编程错误,因为主键有冲突的可能性。在这种情况下,您可能会发现这很有用:[Django编程错误列即使在运行migrations](https://stackoverflow.com/questions/42613536/django-programming-error-column-does-not-exist-even-after-running-migrations)之后也不存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58217834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档