我正在从Rails迁移到Django并拥有一个现有的数据库。我通过models.py
创建了python manage.py inspectdb > models.py
,进行了更改,并测试了一些端点。一切似乎都很好。
然后我跑python manage.py makemigrations
和migrate
进行最初的django镜像。
我注意到一个名为ArInternalMetadata
/ ar_internal_metadata
的旧铁路特定型号/表。我想我可以通过简单地从models.py
移除模型并重新运行makemigrations
来轻松移除表格,但是当我这样做时,django只是说No changes detected
。运行migrate
也不会删除表。
弄清楚了。当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
删除该表。