一尘不染

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

python

使用Django 1.7迁移。

我不小心在数据库中删除了一个表。我假设再次运行迁移将重新创建表,但是没有,Django声明“不应用任何迁移”。

如何让Django重新创建表?

我跑了:

> makemigrations - No changes detected
> migrate - No migrations to apply.

我尝试过更改模型并运行新的迁移,它只是指出“表’x.test_customer’不存在”是正确的,但是我希望它可以重新创建表。


阅读 203

收藏
2021-01-20

共1个答案

一尘不染

迁移检查模型中的差异,然后将其转换为操作,然后转换为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))
    ]

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

2021-01-20