如何在Django中删除模型但保留数据库表格

11

我想删除模型的类声明,但是想保留数据库中的记录和表。我该怎么做?


2
你为什么想要移除模型呢?你可以简单地保留模型,但不再对其进行任何操作。 - Willem Van Onsem
1
我想要删除它,因为这是一个无用的类声明,不会在任何地方使用。 - Julio Marins
2个回答

15

通过将Meta类属性managed设置为False(默认值为True),可以停止Django管理您的模型,如下所示:

class SomeModel(models.Model):
    ....

    class Meta:
        managed = False

然后运行python manage.py makemigrations,它应该会创建一个迁移,告诉你类似于以下内容:

- Change Meta options on something

运行迁移命令python manage.py migrate,这将停止Django管理该模型并从您的代码库中删除它。 迁移将如下所示:

class Migration(migrations.Migration):

    dependencies = [
        ('blah', '0001_initial'),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='something',
            options={'managed': False},
        ),
    ]

1
关于Django 2.2,当迁移到managed = False后,删除模型时运行./manage makemigrations仍会自动创建一个migrations.DeleteModel迁移...我错过了什么吗? - tomyo
1
嗨Tomyo!我遇到了同样的问题,并在本地测试以查看发生了什么。确实会创建一个DeleteModel迁移,但是在运行它时,我注意到表被保留了。 - Jasper

-1

如果这个类不会在任何地方使用,但你想保留数据:

  • 对该数据进行转储,并创建一个新的数据库来存储转储数据。
  • 删除该模型。
  • 创建一个删除该模型的迁移。

如果你在代码中删除了该模型,我认为每次执行 manage makemigrations 都会创建一个删除表的迁移。


这个说法“如果你在代码中删除了模型,我认为每次执行管理makemigrations时都会创建一个用于删除表的迁移。”是不正确的。 - n8sty
@n8sty,我试过了,我从models中删除了该类,然后执行了 make migrations,它创建了一个用于删除表的迁移。 - grouchoboy
是的 - 请看我的回答,其中解释了原因。简而言之,您可以将模型从Django管理中移除,这样就可以在不创建迁移的情况下删除它。 - n8sty
哦,是的,我忘记了你说“然后从你的代码库中删除它”的那部分 ;) - grouchoboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接