Django 1.7迁移 – 我如何清除所有的迁移,从头开始?

所以我现在正在快速迭代django应用程序,并且不断调整models.py。 在一两天的编程和testing过程中,我生成了几十个迁移文件。 有时候,我真的把这个模式分开了,完全重新做。 这导致迁移过程抱怨很多关于默认和空值等等。 如果可能的话,我只是想抓取所有的迁移工作,现在重新开始迁移,我终于知道自己在做什么了。 到目前为止,我的做法是:

  1. 删除__init__.py之外的所有迁移文件夹。
  2. 放入我的PostgreSQL控制台,然后执行: DELETE FROM south_migrationhistory WHERE app_name='my_app';
  3. 而在PostgreSQL控制台中,删除所有与my_app关联的表。
  4. 重新运行./manage.py makemigrations my_app – 这会在我的migrations文件夹中生成一个0001_initial.py文件。
  5. 运行./manage migrate my_app – 我希望这个命令重新构build我的所有表,但是却说:“没有迁移到应用”。

是什么赋予了?

另外, south_migrationhistory数据库performance在仍然在使用中,我已经倾倒南部,并切换到Django 1.7?

谢谢。

所以我在我的问题中概述的分步计划确实有效,但是不要从south_migrationhistory数据库表中删除行,而必须从south_migrationhistory数据库表中删除行。

该命令是: DELETE FROM django_migrations WHERE app='my_app'

完成此操作后,您将可以从头开始重新运行迁移。

我只是想把所有的步骤变成一个命令格式:

注:下面的命令是相当具有破坏性的,这是一个手段, start from scratch OP start from scratch问。

mikeb发表评论后,我想补充mikeb

预先检查您将删除的文件

find . -path *migrations* -name "*.py" -not -path "*__init__*"

然后,将步骤1的命令调整为适用于您的开发环境的命令。

  1. 从所有的应用程序中删除所有的迁移:
 find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path 
  1. 重新创build整个数据库:
 sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\"" sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\"" sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user 
  1. 让你的数据库最新:
 python3 manage.py makemigrations python3 manage.py migrate