Django 1.8:为现有架构创建初始迁移
我开始了一个使用迁移系统的django 1.8项目。
事情变得一团糟,所以我从数据库中删除了迁移文件夹和表,现在我试图重建它们,但没有成功。
我有三个应用程序(3个models.py
文件),这些模型完全反映了表格!
到目前为止,我发现的最佳方法是:
- 删除所有
migrations
文件夹。做完了! - 从
django_migrations
表中删除所有内容。做完了! python manage.py makemigrations --empty <app>
为每个应用程序运行。做完了!- 运行
python manage.py migrate --fake
。做完了!(尽管只有在每个makemigrations命令之后都运行它,它才有效。现在,我添加一个新字段,运行
makemigrations
命令,并且收到以下错误:django.db.utils.OperationalError: (1054, "Unknown column 'accounts_plan.max_item_size' in 'field list'")
我在这件事上花了HOURS。我如何初始化迁移,以便每次都能继续工作而不会中断迁移?
为什么这么复杂?为什么没有一个简单的单线:initiate_migrations_from_schema
?
编辑:
现在事情变得更糟了。我删节了django_migrations
表并删除了所有migrations
文件夹。
现在,我尝试运行python manage.py migrate --fake-initial
(在DEV文档中找到的东西),只是这样就设置了Django的所有“内部”应用程序(身份验证,会话等),并且得到了:
(1054, "Unknown column 'name' in 'django_content_type'"
)。
现在,该“列”不是真实的列。这是@property
Django contenttypes
应用程序中定义的。这里发生了什么?为什么将name
属性标识为真实列?
回答:
终于让它工作了,尽管我不知道为什么,但我希望它将来能工作。
经过无数次尝试并经过Django的开发站点(链接)。
这是步骤(针对遇到此问题的人员):
- 清空
django_migrations
表格:delete from django_migrations;
- 对于每个应用程序,删除其
migrations
文件夹:rm -rf <app>/migrations/
- 重置“内置”应用的迁移:
python manage.py migrate --fake
- 对于每个运行的应用:
python manage.py makemigrations <app>
。注意相关性(带有ForeignKey的模型应在其父模型之后运行)。 - 最后:
python manage.py migrate --fake-initial
在那之后,我运行了没有
--fake-initial
标志的最后一个命令,只是为了确保。
现在一切正常,我可以正常使用迁移系统。
我确定我不是唯一遇到此问题的人。必须对其进行更好的记录,甚至简化。
针对Django 1.9用户的更新:
我再次使用Django 1.9.4遇到这种情况,而第5步失败。
所有我必须做的是替换--fake-initial
用--fake
,以使其正常工作。
以上是 Django 1.8:为现有架构创建初始迁移 的全部内容, 来源链接: utcz.com/qa/403053.html