【问题标题】:Migrations applied but no migration folder已应用迁移但没有迁移文件夹
【发布时间】:2018-03-07 09:51:57
【问题描述】:

前段时间我开发了一个 Django 1.8 项目。几个月前我部署了这个项目,一切都运行得很完美。今天,我不得不对数据库进行更改,但是当我尝试运行 python manage.py makemigrations 时,我收到消息“未检测到更改”。然后我注意到该项目的任何应用程序中都没有迁移文件夹。我不明白的是:

  • 我在第一次部署项目时进行了迁移(makemigrations 然后migrate),一切正常。我没有检查迁移文件夹是否在那里。
  • 自第一次迁移以来,我没有对数据库进行任何更改,也没有删除任何文件夹。

当我运行python manage.py showmigrations 时,我得到以下信息:

admin
 [X] 0001_initial
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

这是完整的输出。没有任何我的应用程序的迹象。

所以我的问题如下:

  • 如何进行迁移、创建表等但没有创建迁移文件夹?
  • 我该去哪里?我想进行新的迁移,但几乎所有重新初始化迁移的方法都包括“删除迁移文件夹”的步骤。

【问题讨论】:

    标签: django


    【解决方案1】:

    允许应用没有迁移。只有具有migrations/__init__.py 文件的应用才被视为具有迁移。 manage.py makemigrations 不会为未迁移的应用创建迁移,除非您明确传递应用名称。在 Django 1.7/1.8 上,表仍然是通过旧的 syncdb 机制自动创建的——从 Django 1.9 开始,迁移时需要 --syncdb 标志。

    现在您需要让您的迁移与您的数据库同步。为此,您需要:

    1. 恢复您在最初运行 manage.py migrate 后所做的所有模型更改。
    2. 运行 manage.py makemigrations <app_label> 以创建与您当前数据库匹配的初始迁移。
    3. 运行manage.py migrate --fake-initial <app_label> 将新迁移标记为已应用。

    为每个应用运行这些步骤后,您的迁移应该与您的数据库同步,因此您现在可以编辑您的模型并创建新的迁移。

    【讨论】:

    • 这太完美了,非常感谢。非常好的解决方案,使我能够保留所有数据。我忘记了迁移文件夹是用startapp 创建的,因为我没有将它们包含在 git 中,所以在拉到服务器时我没有它们......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多