Django自动为现有数据库表创建主键

7

我有一个已经存在的数据库,现在想要通过Django来访问它。我使用python manage.py inspectdb命令创建了与该数据库对应的模型。目前我可以在Python shell中导入这些模型,但是当我尝试以任何方式访问实际对象时,都会出现错误:OperationalError: (1054, "Unknown column 'some_table.id' in 'field list'")。我发现数据库中的表实际上没有id字段。那么我该怎么做呢?需要更新Meta类中的managed字段并运行迁移以便自动创建此字段吗?

1个回答

7
从Django文档中得知:此功能旨在作为快捷方式,而不是定义模型生成的标准。有关更多信息,请参阅inspectdb的文档。(参考:https://docs.djangoproject.com/en/1.8/howto/legacy-databases/)
您需要手动清理模型并进行迁移。添加“id”字段的行如下:
id = models.IntegerField(primary_key=True)

警告:一定要创建数据库的备份来进行测试,而不是直接操作原始数据库。这可能需要您进行多次试验才能正确完成。在您确信已经正确后,可以更改 Managed=True,但请务必非常小心!


太好了!谢谢。所以我猜如果我决定一个表中的现有字段应该是主键,我只需要将primary_key属性设置为true? - Hudson Worden
1
如果您需要更多帮助,请告诉我们,这可能会变得棘手(我自己只做过两次),因此请务必小心处理源数据!当您有机会时,请将答案标记为正确。 - FlipperPA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接