Django在数据库更改时更新models.py

时间:2015-05-30 14:54:35

标签: mysql django django-syncdb

我知道这可能是一个基石问题,但是我已经花了半个小时试图解决这个问题并找不到任何东西:S

我有一个django应用程序,我显着改变了我的数据库表。我想更新我的models.py文件,但我尝试了以下命令,没有任何反应。

syncdb,migrate,makemigrations ...

我想删除以前的模型文件并创建一个新文件。

谢谢!

1 个答案:

答案 0 :(得分:5)

你的工作流程错误。

Django有一个管理数据库的ORM。如果要进行更改,请编辑models.py文件。迁移将自动更改数据库表以匹配新模型。它不起作用:Django不使用数据库内省来获取数据库中的手动更改并编辑模型文件。

现在,有一种解决方法,但这不是一个长期的解决方案。随着时间的推移,您需要为模型添加自定义功能,并且您不希望在每次更改后重写该功能。 Django提供的内省也不完美,它只是作为一种工具,可以快速开始在遗留数据库之上开发应用程序。

您可以使用manage.py inspectdb所有现有表生成Django代码。然后,您可以将特定模型的代码复制到models.py文件中。然后,您应该删除managed = Falsedb_table = ...选项,删除所有迁移,仔细检查字段,然后重新运行makemigrationsmigrate --fake-initial。这将使数据库,模型和迁移恢复同步,然后您将能够使用迁移框架进行任何其他更改。

请务必阅读migrations上的文档。这应该让您充分了解Django如何管理数据库,以及更改数据库的工作流程。