使用Django迁移删除表

时间:2019-02-23 00:05:53

标签: python django django-models django-migrations

我正在从Rails迁移到Django,并拥有一个现有数据库。我通过ag3 <- aggregate(z, as.yearmon, function(x) complex(real = sum(x), imag = length(x))) rollapplyr(ag3, 3, function(x) sum(Re(x)) / sum(Im(x)), fill = NA) ## Jan 1970 Feb 1970 Mar 1970 Apr 1970 May 1970 Jun 1970 Jul 1970 Aug 1970 ## NA NA 145.0 175.0 204.5 235.0 265.5 296.5 ## Sep 1970 Oct 1970 Nov 1970 Dec 1970 Jan 1971 ## 326.5 357.5 388.0 418.5 434.5 创建了models.py,进行了更改,并测试了一些端点。一切似乎都很好。

然后我分别运行python manage.py inspectdb > models.pypython manage.py makemigrations来进行最初的django迁移。

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

1 个答案:

答案 0 :(得分: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删除表。