我应该对我的所有应用程序运行 Django“makemigrations”吗?
Posted
技术标签:
【中文标题】我应该对我的所有应用程序运行 Django“makemigrations”吗?【英文标题】:Should I run Django "makemigrations" against all of my apps? 【发布时间】:2015-12-19 20:06:24 【问题描述】:我刚刚将我的项目升级到 Django 1.8.4。我以前从未在这个项目中使用过迁移。我发现我必须对我的四个应用程序显式运行“makemigrations”命令,因为它们包含 auth_user 表的外键。我是否需要针对其他六个应用程序运行 makemigrations 命令?我问的原因是因为documents 说,
如果您的应用已经有模型和数据库表,并且还没有迁移(例如,您根据以前的 Django 版本创建它),您需要将其转换为使用迁移"
但是,当我对“家庭”应用程序运行命令时,我收到了以下消息:
No changes detected in app 'home'
在将项目转换为 Django 1.8 时,是否应该对 all 应用运行 makemigrations 命令,然后在实际数据库表已经存在的情况下运行“migrate --fake-initial”? p>
谢谢。
【问题讨论】:
我在忍受了很多小时后更新了我的答案......如果 django 无法使用相关命令迁移所有应用程序,则必须同时迁移所有应用程序。 【参考方案1】:更新:确保migrations
文件夹包含__init__.py
。
确实,有很多次,我必须删除并重新创建我的开发数据库。
在此过程中,我遇到了同样的问题,尤其是在升级到Django 1.8.* / 1.9.*
之后。
在我的脚本中,删除迁移文件夹的内容后,我在所有应用程序中运行makemigrations
单独simultaneously。
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
在此之前,我会备份所有数据:
./manage.py dumpdata --exclude auth.permission --exclude contenttypes --exclude admin.LogEntry --indent 2 > db.json
【讨论】:
我害怕迁移。具体来说,恐怕我会遇到迁移无法运行的情况,我将无法更新迁移文件,因此它们会运行。如果我达到了这一点,我是否可以假设我能够按照您的描述执行并删除我的“迁移”目录中的所有迁移文件,在每个应用程序上运行“makemigrations”,然后基本上重新开始?谢谢。 @Robert 有时迁移让我觉得它们复杂的结构会让我陷入无法应对的情况。有时,他们让我对他们的能力说不出话来,这让我免于破坏数据库。然而,最重要的是数据。我真的很喜欢,删除数据库并自动恢复它,只是为了避免调试迁移的麻烦。某处隐藏着使我们的关系平衡的秘密。我已经更新了我的答案!以上是关于我应该对我的所有应用程序运行 Django“makemigrations”吗?的主要内容,如果未能解决你的问题,请参考以下文章
Django 使用表单输入来查询数据——应该很简单,不是(对我来说)