首页 > 解决方案 > 如何防止 Django 1.11 为非托管模型创建迁移?

问题描述

我有一个带有非托管模型的 Django 1.11.10 项目,例如:

class MyModel(models.Model):

    id = models.PositiveIntegerField(primary_key=True)

    name = models.CharField(max_length=500)

    class Meta:
        managed = False

该模型包装了一个自定义 SQL 视图。但是,当我运行时manage.py makemigrations,我发现 Django 尝试生成一个迁移,为这个模型创建一个传统的 SQL 表。

在过去的 Django 版本中,正如这个问题所示managed = False用于防止这种情况发生。这不再是真的了吗?如何让 Django 不忽略模型上的模式更改?

标签: pythondjangodjango-modelsdjango-migrations

解决方案


在迁移文件中,您可以看到选项更多信息可以在这里找到)

    options={
        'managed': False,
    },

这意味着不要创建表格,正如@soon 所说,您可以继续查看sqlmigrate,以及类似这样的内容

$ ./manage.py sqlmigrate YOUR_APP_NAME MIGRATION_NUMBER

BEGIN;
--
-- Create model MyModel
--
COMMIT

没有创建真正的表,但是 django 需要迁移来控制模型的变化。

为了排除冲突,当 Django 进行迁移时,它不是从当前模型文件中获取模型描述,而是从 migrtaions 文件夹中的文件逐步恢复它。


推荐阅读