如何防止Django 1.11为非托管模型创建迁移?

时间:2018-05-03 16:26:08

标签: python django django-models django-migrations

我有一个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版本中,as this question illustratesmanaged = False用于防止这种情况发生。这不再是真的吗?你如何让Django不忽略模型上的模式变化?

1 个答案:

答案 0 :(得分:2)

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

    options={
        'managed': False,
    },

这意味着不要创建一个表,并且@soon说你可以查看sqlmigrate,以及类似的东西

$ ./manage.py sqlmigrate YOUR_APP_NAME MIGRATION_NUMBER

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

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

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