【发布时间】:2015-07-05 10:50:42
【问题描述】:
我启动了一个使用迁移系统的 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'")
我在这件事上花了好几个小时。我如何初始化迁移,以便每次都可以继续工作而不会中断迁移?
为什么这么复杂?为什么没有简单的单行:initiate_migrations_from_schema?
编辑:
现在事情变得更糟了。我截断了django_migrations 表并删除了所有migrations 文件夹。
现在我尝试运行 python manage.py migrate --fake-initial(我在 DEV 文档中找到的东西),这样它就设置了 Django 的所有“内部”应用程序(身份验证、会话等),我得到:(1054, "Unknown column 'name' in 'django_content_type'")。
现在,这个“列”不是真正的列。它是在 Django 的 contenttypes 应用程序中定义的 @property。这里发生了什么?为什么将name 属性识别为真实列?
【问题讨论】:
-
你删除了实际的表吗?还是你只是清空了它?
-
我刚刚清空了:
delete from django_migrations -
您可能需要drop all of the tables,而不仅仅是清空它们
-
我在这些表中有数据,我不想删除它们。我知道我可以备份、删除、创建和恢复数据。但我有 10 张桌子,我不想那样做。我只想启动迁移。