我刚刚开发了一个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
这是完整的输出。没有任何我的应用程序的迹象。
所以我的问题如下:
答案 0 :(得分:8)
允许应用无迁移。只有具有migrations/__init__.py
文件的应用才会被视为具有迁移功能。除非您明确传递应用名称,否则manage.py makemigrations
不会为未迁移的应用创建迁移。在Django 1.7 / 1.8上,表仍然是通过旧的syncdb机制自动创建的 - 从Django 1.9开始,迁移时需要--syncdb
标志。
现在,您需要使迁移与数据库保持同步。为此,您需要:
manage.py migrate
后所做的所有模型更改。manage.py makemigrations <app_label>
以创建与当前数据库匹配的初始迁移。manage.py migrate --fake-initial <app_label>
以将新迁移标记为已应用。 为每个应用程序运行这些步骤后,您的迁移应与数据库保持同步,以便您现在可以编辑模型并创建新的迁移。