我有一个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 illustrates,managed = False
用于防止这种情况发生。这不再是真的吗?你如何让Django不忽略模型上的模式变化?
答案 0 :(得分:2)
在迁移文件中,您可以看到选项可以找到更多信息here)
options={
'managed': False,
},
这意味着不要创建一个表,并且@soon说你可以查看sqlmigrate
,以及类似的东西
$ ./manage.py sqlmigrate YOUR_APP_NAME MIGRATION_NUMBER
BEGIN;
--
-- Create model MyModel
--
COMMIT
没有创建真正的表,但是django需要迁移来控制模型的更改。
要排除冲突,Django进行迁移时,它不会从当前模型文件中获取模型描述,而是从migrtaions文件夹中的文件中逐步恢复。