我启动了一个 django 1.8 项目,它使用迁移系统。
不知何故,事情变得一团糟,所以我从数据库中删除了迁移文件夹和表,现在我试图重建它们,但没有成功。
我有三个应用程序(3models.py
文件),并且模型完全反映了表格!
到目前为止我发现的最好的方法是:
- 删除所有
migrations
文件夹。完毕!
- 删除所有内容
django_migrations
桌子。完毕!
- Run
python manage.py makemigrations --empty <app>
对于每个应用程序。完毕!
- Run
python manage.py migrate --fake
。完毕! (尽管只有当我在每次之后运行它时它才有效makemigrations
命令。
现在我添加一个新字段,运行makemigrations
命令,我收到以下错误:
django.db.utils.OperationalError: (1054, "Unknown column 'accounts_plan.max_item_size' in 'field list'")
我已经在这件事上花了几个小时了。我到底如何初始化迁移,以便我可以继续工作而不会每次都中断迁移?
为什么这么复杂?为什么没有一个简单的一句话:initiate_migrations_from_schema
?
EDIT:
现在事情变得更糟糕了。我截断了django_migrations
表并删除了所有migrations
folder.
现在我尝试跑步python manage.py migrate --fake-initial
(我在 DEV 文档中找到的东西),它设置了 Django 的所有“内部”应用程序(身份验证、会话等),我得到:
(1054, "Unknown column 'name' in 'django_content_type'")
.
现在,这个“专栏”并不是真正的专栏。它是@property
Django 中定义的contenttypes
应用程序。这里发生了什么?为什么它识别name
属性作为真正的列?
终于让它工作了,虽然我不知道为什么,但我希望它将来能工作。
经过多次试验并浏览 Django 的开发网站后(link).
以下是步骤(适用于遇到此问题的人):
- 清空
django_migrations
table: delete from django_migrations;
- 对于每个应用程序,删除其
migrations
文件夹:rm -rf <app>/migrations/
- 重置“内置”应用程序的迁移:
python manage.py migrate --fake
- 对于每个应用程序运行:
python manage.py makemigrations <app>
。处理依赖关系(具有外键的模型应在其父模型之后运行)。
- 最后:
python manage.py migrate --fake-initial
之后我运行了最后一个命令,没有--fake-initial
标志,只是为了确定。
现在一切正常,我可以正常使用迁移系统。
我确信我不是唯一遇到这个问题的人。必须更好地记录它,甚至简化它。
Django 1.9 用户更新:
我在 Django 1.9.4 中再次遇到了这种情况,第 5 步失败了。
我所要做的就是更换--fake-initial
with --fake
使其发挥作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)