已应用迁移但没有迁移文件夹

时间:2017-09-26 08:55:43

标签: django

我刚刚开发了一个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

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

所以我的问题如下:

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

1 个答案:

答案 0 :(得分:8)

允许应用无迁移。只有具有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>以将新迁移标记为已应用。
  4. 为每个应用程序运行这些步骤后,您的迁移应与数据库保持同步,以便您现在可以编辑模型并创建新的迁移。