数据库更改时 Django 更新 models.py
Django update models.py when database changes
我知道这可能是一个愚蠢的问题,但我已经花了半个小时试图解决这个问题但找不到任何东西:S
我有一个 Django 应用程序,我对数据库表进行了重大更改。我想更新我的 models.py 文件,但我尝试了以下命令但没有任何反应。
syncdb、迁移、makemigrations...
我想删除我以前的模型文件并创建一个新的。
谢谢!
你的工作流程是错误的。
Django 有一个管理数据库的 ORM。如果您想进行更改,请编辑 models.py
文件。迁移将自动更改数据库 table 以匹配您的新模型。反之则不行:Django 不使用数据库内省来获取数据库中的手动更改并编辑模型文件。
现在,有一个解决方法,但这不是一个长期的解决方案。随着时间的推移,您会想要向您的模型添加自定义功能,并且您不想在每次更改后重写该功能。 Django 提供的内省也不完美,它只是作为一种工具,可以在遗留数据库之上快速开始开发您的应用程序。
您可以使用 manage.py inspectdb
为 所有 现有 table 生成 Django 代码。然后,您可以将特定型号的代码复制到 models.py
文件中。然后,您应该删除 managed = False
和 db_table = ...
选项,删除所有迁移,仔细检查字段,然后重新运行 makemigrations
和 migrate --fake-initial
。这将使数据库、模型和迁移重新同步,然后您将能够使用迁移框架进行任何其他更改。
一定要阅读 migrations 上的文档。这应该让您很好地了解 Django 如何管理数据库,以及对数据库进行更改的工作流程。
我知道这可能是一个愚蠢的问题,但我已经花了半个小时试图解决这个问题但找不到任何东西:S
我有一个 Django 应用程序,我对数据库表进行了重大更改。我想更新我的 models.py 文件,但我尝试了以下命令但没有任何反应。
syncdb、迁移、makemigrations...
我想删除我以前的模型文件并创建一个新的。
谢谢!
你的工作流程是错误的。
Django 有一个管理数据库的 ORM。如果您想进行更改,请编辑 models.py
文件。迁移将自动更改数据库 table 以匹配您的新模型。反之则不行:Django 不使用数据库内省来获取数据库中的手动更改并编辑模型文件。
现在,有一个解决方法,但这不是一个长期的解决方案。随着时间的推移,您会想要向您的模型添加自定义功能,并且您不想在每次更改后重写该功能。 Django 提供的内省也不完美,它只是作为一种工具,可以在遗留数据库之上快速开始开发您的应用程序。
您可以使用 manage.py inspectdb
为 所有 现有 table 生成 Django 代码。然后,您可以将特定型号的代码复制到 models.py
文件中。然后,您应该删除 managed = False
和 db_table = ...
选项,删除所有迁移,仔细检查字段,然后重新运行 makemigrations
和 migrate --fake-initial
。这将使数据库、模型和迁移重新同步,然后您将能够使用迁移框架进行任何其他更改。
一定要阅读 migrations 上的文档。这应该让您很好地了解 Django 如何管理数据库,以及对数据库进行更改的工作流程。