Django 1.7迁移不会重新创建丢弃的表,为什么?

Pro*_*eus 35 python django django-1.7

使用Django 1.7迁移.

我不小心在我的数据库中删除了一个表.我假设通过再次运行迁移,这将重新创建表但不,Django声明"没有要迁移的迁移".

如何让Django重新创建表格?

我跑了:

> makemigrations - No changes detected
> migrate - No migrations to apply.
Run Code Online (Sandbox Code Playgroud)

我已经尝试对模型进行更改并运行新的迁移,它只是声明"表'x.test_customer'不存在"这是正确的,但我希望它会重新创建表.

J.Q*_*J.Q 51

转到您的数据库并找到该表django_migrations.删除所有app等于您的应用名称的行.

然后做一个makemigrations&migrate将工作.

  • 如果迁移中的应用程序之间存在依赖关系,这可能很危险。 (3认同)
  • 这比创建手动迁移的公认答案更方便 (2认同)

Raú*_* EL 22

我找到并完美运作的另一种解决方案:

在django 1.7:

  1. 删除迁移文件夹

  2. 在数据库中:DELETE FROM django_migrations WHERE app = 'app_name'.

    您也可以截断此表.

  3. python manage.py makemigrations

  4. python manage.py migrate --fake

在django 1.9.5中:

  1. 删除迁移文件夹
  2. 在数据库中:DELETE FROM django_migrations WHERE app = 'app_name'.

    您也可以截断此表.

  3. python manage.py makemigrations app_name

  4. python manage.py migrate

这对我来说100%有效!


yuv*_*uvi 20

迁移检查模型中的差异,然后将其转换为转换为SQL的操作.它不会自动将db方案与您的模型同步,也无法知道您丢弃了一个表(它不知道手动更改,因为,您不应该进行手动更改.这就是重点)

答案?手动更改也需要手动迁移.您需要做的只是编写自己的迁移并手动告诉south重新构建表.这不是很困难,文档使它变得非常简单.做这样的事情:

from django.db import migrations, models

class Migration(migrations.Migration):

    operations = [
        migrations.CreateModel("Foo"),
        migrations.AddField("Foo", "bar", models.IntegerField(default=0))
    ] 
Run Code Online (Sandbox Code Playgroud)

您可以查看第一个迁移文件(首先创建模型的文件)并复制粘贴几乎所有文件.然后,您所要做的就是像往常一样运行迁移


joh*_*aas 7

我实际上找到了一种更简单的方法.你假设你回滚了不存在的东西,然后重新迁移.如果您的迁移0005是创建表的那个:

python manage.py migrate myapp --fake 0004
python manage.py migrate myapp
Run Code Online (Sandbox Code Playgroud)

之后应该是好的!

如果您需要稍后跳过,请执行以下操作:

python manage.py migrate myapp --fake 0004
python manage.py migrate myapp 0005
python manage.py migrate myapp --fake
Run Code Online (Sandbox Code Playgroud)

之后应该是好的!


Sir*_*leh 5

在我的情况下,django 2.0.2为了重新创建删除的表,我需要在其中注释我的模型myapp,然后使用--fake和取消注释我的模型并在没有--fake 一点不同的情况下迁移raul 答案:

  1. 删除所需应用程序中的迁移文件
  2. 感谢劳尔回答:在数据库中:DELETE FROM django_migrations WHERE app = 'app_name'
  3. 中的注释代码models.py和所有这些模型的用法viewssignals等等(以防止错误)。
  4. python manage.py makemigrations YOUR_APP_NAME
  5. python manage.py migrate --fake
  6. 取消评论您在第 3 步中评论的内容
  7. python manage.py makemigrations YOUR_APP_NAME
  8. 不带 --fake迁移:python manage.py migrate

这应该可以解决一些用户问题。