我正在我的应用程序中创建一些动态 Django 模型,除了迁移系统之外,一切似乎都按预期工作。
如果我创建一个动态 Django 模型并设置 Managed = False,Django 的makemigrations
命令仍会为该新模型生成迁移。迁移看起来像这样:
class Migration(migrations.Migration):
dependencies = [
('atom', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='books',
fields=[
],
options={
'db_table': 'books',
'managed': False,
},
bases=(models.Model,),
),
]
如果我不创建迁移,那么当我运行时python manage.py migrate
,我看到以下消息(用大而可怕的红色字母):
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
有没有办法告诉 Django 1.7 中的迁移系统忽略所有非托管模型?或者也许是一个migrations = False
在模型的 Meta 类中设置?
UPDATE:为了澄清起见,我使用一种方法来创建类似于以下位置描述的动态模型:
- http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model
- https://code.djangoproject.com/wiki/DynamicModels https://code.djangoproject.com/wiki/DynamicModels
此方法非常适合根据配置模型中存储的信息生成动态模型(https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach)。我确实必须注册一个信号来清除 django 模型缓存,以便在配置实例更改时捕获模型的更改,但一切似乎都运行良好,除了为这些模型生成迁移之外。如果我删除其中一项配置并且模型从 Django 的缓存中删除,则需要再次更新迁移,删除它不应该关心的模型。
这些动态模型并未在具体应用中使用。我在代码中没有引用书籍模型(来自上面的示例)。它们在运行时生成并用于从它们提供访问权限的旧表中读取信息。