我有一个现有的MySQL数据库,其中有几个已经填充了数据的表。我用应用程序创建并配置了Django项目。Django与数据库之间的通信工作如出一辙。我使用'inspectdb‘命令生成了一个“models.py”命令来创建我的所有应用程序模型:
python manage.py inspectdb > myapp/models.py我的问题是,我的模型中没有一个在‘model s.py’中显示任何'id‘字段。所有现有的MySQL表都将“id”列作为主键(为这些表启用了自动增量),这似乎很奇怪。
我想知道是否需要显式地在使用inspectdb创建的所有模型类中添加'id‘主键字段,或者它是否不需要(在这种情况下是隐式的)。
为什么Django模型定义中缺少“id”主键,我应该将这个字段添加到模型类中吗?
电流设置
1.4.4
发布于 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列.
发布于 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)之后也不存在。
https://stackoverflow.com/questions/58217834
复制相似问题