我应该对所有的应用运行Django的"makemigrations"命令吗?
我应该对所有的应用运行Django的"makemigrations"命令吗?
我刚把我的项目升级到了Django 1.8.4。在这个项目中,我以前从未使用过迁移。我发现我必须明确地对四个应用运行"makemigrations"命令,因为它们包含了对auth_user表的外键。我需要对其他六个应用运行makemigrations命令吗?我问这个问题的原因是因为这个文档说道:
如果你的应用程序已经有了模型和数据库表,并且还没有迁移(例如,你是在之前的Django版本中创建的),你需要将其转换为使用迁移。
然而,当我对我的"home"应用运行该命令时,我收到了这个消息:
在应用程序'home'中未检测到任何更改
在将项目转换为Django 1.8时,是否应该对所有应用运行makemigrations命令,然后如果实际的数据库表已经存在,再运行"migrate --fake-initial"命令?
谢谢。
问题出现的原因:用户在删除和重新创建开发数据库的过程中,遇到了在升级到Django 1.8.* / 1.9.*后的问题。用户在删除migrations文件夹的内容后,运行makemigrations命令来对所有应用进行迁移。
解决方法:用户在运行makemigrations命令之前,备份了所有数据。如果用户在迁移过程中遇到问题,可以删除所有migrations目录中的迁移文件,然后对每个应用运行makemigrations命令,重新开始迁移过程。
更新:确保migrations文件夹中包含一个__init__.py文件。
确实,有很多次,我不得不删除并重新创建我的开发数据库。
在这个过程中,我尤其在升级到Django 1.8.* / 1.9.*后遇到了相同的问题。
在我的脚本中,删除migrations文件夹的内容后,我在所有的应用程序中同时运行makemigrations命令。
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
在此之前,我备份了所有的数据:
./manage.py dumpdata --exclude auth.permission --exclude contenttypes --exclude admin.LogEntry --indent 2 > db.json
我害怕迁移。具体来说,我害怕会遇到迁移无法运行的情况,而且我也无法更新迁移文件使其能够运行。如果我达到了那个点,我可以假设我能够按照你所描述的方式,删除所有"migrations"目录中的迁移文件,在每个应用上运行"makemigrations"命令,从而重新开始吗?谢谢。
有时迁移让我感觉到它们复杂的结构会让我陷入一种我无法应对的情况。其他一些时候,它们让我对它们的能力感到无言以对,因为它们能够帮我避免破坏数据库。最重要的是数据。我真的很喜欢删除数据库并自动还原它,只是为了避免调试迁移的麻烦。在那里,隐藏着我们关系平衡的秘密。我更新了我的答案!