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

Cer*_*rin 5 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
Run Code Online (Sandbox Code Playgroud)

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

在过去的Django版本中,正如这个问题所示,managed = False用于防止这种情况发生.这不再是真的吗?你如何让Django不忽略模型上的架构变化?

小智 4

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

    options={
        'managed': False,
    },
Run Code Online (Sandbox Code Playgroud)

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

$ ./manage.py sqlmigrate YOUR_APP_NAME MIGRATION_NUMBER

BEGIN;
--
-- Create model MyModel
--
COMMIT
Run Code Online (Sandbox Code Playgroud)

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

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