首页 > 解决方案 > 如何在“makemigrations”命令后对数据库应用一项特定更改?

问题描述

我在我的一个模型中添加了一个字段,但是在“模型”文件夹中,我还有另外两个 python 文件,它们只有查看模型,我可以从中查询数据库中的视图。当我运行 makemigrations 命令时,创建的新迁移文件还包括将这些视图模型作为表添加到我的数据库中(我不想这样做)。我怎样才能忽略这些更改,而只将一个字段添加到数据库上的实际表中。

我想我可能必须删除migrations.CreateModel...新迁移文件中的 并只保留migrations.addField...,然后运行“迁移”命令。我没有继续这样做,因为我不确定,也许它会以某种方式弄乱我的数据库。

提前感谢任何可以提供帮助的人。

标签: djangodjango-migrations

解决方案


当您为数据库视图创建模型时,您必须像这样添加元类 managed = false 和 db_table:

class MyViewModel(models.Model):
    field: models.CharField(max_length=100)

    class Meta:
         managed = False
         db_table = 'database_view_name'

当您编写此代码并运行 makemigrations 时,生成的迁移包含此模型,但是当您运行迁移时,此迁移不会更改数据库上的任何内容。

您还可以在 python 中使用迁移创建视图。有关更多详细信息,请参阅migrations.RunPython


推荐阅读