django - 如何在“makemigrations”命令后对数据库应用一项特定更改?
问题描述
我在我的一个模型中添加了一个字段,但是在“模型”文件夹中,我还有另外两个 python 文件,它们只有查看模型,我可以从中查询数据库中的视图。当我运行 makemigrations 命令时,创建的新迁移文件还包括将这些视图模型作为表添加到我的数据库中(我不想这样做)。我怎样才能忽略这些更改,而只将一个字段添加到数据库上的实际表中。
我想我可能必须删除migrations.CreateModel...
新迁移文件中的 并只保留migrations.addField...
,然后运行“迁移”命令。我没有继续这样做,因为我不确定,也许它会以某种方式弄乱我的数据库。
提前感谢任何可以提供帮助的人。
解决方案
当您为数据库视图创建模型时,您必须像这样添加元类 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
推荐阅读
- angular - 使用 ng build 构建 Angular 应用程序会引发错误 process.umask 不是函数
- sql-server - 缩小事务日志文件不起作用
- python - 如果是数字,如何提取最后一行
- javascript - 有没有办法让 HTML div 像 body 标签一样?
- javascript - 如何在混淆代码中更新变量
- sql - 当其他两列匹配时,将添加一列返回值的 SQL 查询(类似于 excel 中的 vlookup)
- c++ - 现代 C++ 实现具有可变数量 int 参数的函数的最佳方法
- python - Os.path 给出了意外的输出
- python - AttributeError:模块“tensorflow._api.v1.compat.v1.nn”没有属性“avg_pool2d”
- tensorflow - 缺少 Tensorflow.io 模块 - 我如何获取 gfile?