小编典典

Django 1.8:为现有架构创建初始迁移

django

我开始了一个使用迁移系统的django 1.8项目。
事情变得一团糟,所以我从数据库中删除了迁移文件夹和表,现在我试图重建它们,但没有成功。

我有三个应用程序(3个models.py文件),这些模型完全反映了表格!

到目前为止,我发现的最佳方法是:

  1. 删除所有migrations文件夹。做完了!
  2. django_migrations表中删除所有内容。做完了!
  3. python manage.py makemigrations --empty <app>为每个应用程序运行。做完了!
  4. 运行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'")。
现在,该“列”不是真实的列。这是@propertyDjango contenttypes应用程序中定义的。这里发生了什么?为什么将name属性标识为真实列?


阅读 443

收藏
2020-03-27

共1个答案

小编典典

终于让它工作了,尽管我不知道为什么,但我希望它将来能工作。
经过无数次尝试并经过Django的开发站点(链接)。
这是步骤(针对遇到此问题的人员):

  1. 清空django_migrations表格:delete from django_migrations;
  2. 对于每个应用程序,删除其migrations文件夹:rm -rf <app>/migrations/
  3. 重置“内置”应用的迁移: python manage.py migrate --fake
  4. 对于每个运行的应用:python manage.py makemigrations <app>。注意相关性(带有ForeignKey的模型应在其父模型之后运行)。
  5. 最后: python manage.py migrate --fake-initial
    在那之后,我运行了没有--fake-initial标志的最后一个命令,只是为了确保。

现在一切正常,我可以正常使用迁移系统。

我确定我不是唯一遇到此问题的人。必须对其进行更好的记录,甚至简化。

针对Django 1.9用户的更新:
我再次使用Django 1.9.4遇到这种情况,而第5步失败。
所有我必须做的是替换--fake-initial--fake,以使其正常工作。

2020-03-27