使用Django Migrations删除表

问题描述 投票:1回答:1

我正在从Rails迁移到Django并拥有一个现有的数据库。我通过models.py创建了python manage.py inspectdb > models.py,进行了更改,并测试了一些端点。一切似乎都很好。

然后我跑python manage.py makemigrationsmigrate进行最初的django镜像。

我注意到一个名为ArInternalMetadata / ar_internal_metadata的旧铁路特定型号/表。我想我可以通过简单地从models.py移除模型并重新运行makemigrations来轻松移除表格,但是当我这样做时,django只是说No changes detected。运行migrate也不会删除表。

python django django-models django-migrations
1个回答
2
投票

弄清楚了。当inspectdb从现有数据库创建模型时,它默认将managed内部类中的Meta设置为False

class AssetCategories(FacadeModel):
    created_at = models.DateTimeField()
    updated_at = models.DateTimeField()
    name = models.CharField(max_length=255)
    deleted_at = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'asset_categories'

根据Django 2.1 Docs,这将防止删除发生

如果为False,则不会对此模型执行数据库表创建或删除操作

managed = False类中删除Meta允许makemigrations / migrate删除该表。

© www.soinside.com 2019 - 2024. All rights reserved.