我应该对我的所有应用程序运行 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 使用表单输入来查询数据——应该很简单,不是(对我来说)

Django 1.7 迁移不会重新创建删除的表,为啥?

Django 中单元测试的覆盖设置无法正常工作

如何强制对我的 Django 应用程序的某些 URL 使用 SSL?

运行显式创建表的迁移时未创建 Django 表。

Linux C 仅对我的程序禁止核心转储