我启动了一个使用迁移系统的Django 1.8项目.
不知怎么的,事情变得乱七八糟,所以我从数据库中删除了迁移文件夹和表,现在我试图重建它们,但没有成功.

我有三个应用程序(3models.py个文件),模型准确地反映了表格!

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

  1. 清除所有migrations个文件夹.完成!
  2. 删除django_migrations表中的所有内容.完成!
  3. 每个应用程序运行python manage.py makemigrations --empty <app>次.好了!
  4. python manage.py migrate --fake.完成!(尽管只有在每次执行makemigrations命令后运行它时,它才有效.

Now I add a new field, run the makemigrations command, and I receive the following error:
django.db.utils.OperationalError: (1054, "Unknown column 'accounts_plan.max_item_size' in 'field list'")

我在这件事上花了好几个小时.h**l如何初始化迁移,以便在每次迁移都不中断的情况下继续工作?

为什么会这么复杂呢?为什么没有简单的一句话:initiate_migrations_from_schema

EDIT:
Now things get even nastier. I truncated the django_migrations table and deleted all the migrations folder.
Now I try to run python manage.py migrate --fake-initial (something I found in the DEV docs), just so it sets up all of Django's 'internal' apps (auth, session, etc) and I'm getting:
(1054, "Unknown column 'name' in 'django_content_type'").
Now, this "column" is not a real column. It's a @property defined in Django's contenttypes app. WHAT IS GOING ON HERE? Why is it identifying the name property as a real column?

推荐答案

终于让它起作用了,虽然我不知道为什么,我希望它将来能起作用.
在做了无数次试验并浏览了Django的开发站点(link)之后.
以下是步骤(适用于遇到此问题的任何人):

  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标志的命令,只是为了确保.

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

我确信我不是唯一遇到这个问题的人.它必须被更好地记录下来,甚至必须得到简化.

Update for Django 1.9 users:
我用Django 1.9.4再次遇到了这种情况,步骤5失败了.
我要做的就是把--fake-initial换成--fake就行了.

Django相关问答推荐

Django中的设计用户类

如果密码在Django中未被散列,则对其进行散列

Django ORM多表一对多关系问题

在 Django 中按月份和年份对帖子进行分类

如何根据状态计算表中数据的数量?

Django 如何知道我的数据库的路径?

基于每个条目的 Django Queryset 过滤

初始填充 Django 表单

我的 django 模板布尔变量在 javascript 中没有按预期工作

更好的 ArrayField 管理小部件?

在 Scrapy 中访问 django 模型

django- nginx: [emerg] open() "/etc/nginx/proxy_params" 在 /etc/nginx/sites-enabled/myproject:11 中失败(2:没有这样的文件或目录)

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

在 Django 管理页面中注册应用程序中的每个表/类

如何在 django 中分离我的模型?

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

如何在 Django 中执行批量插入?

在 Django shell 启动时自动导入模型

在 Django 中的字段中添加额外的约束

django select_related - 何时使用它