Django 1.7 - makemigrations 为非托管模型创建迁移

2024-02-19

我正在我的应用程序中创建一些动态 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 的缓存中删除,则需要再次更新迁移,删除它不应该关心的模型。

这些动态模型并未在具体应用中使用。我在代码中没有引用书籍模型(来自上面的示例)。它们在运行时生成并用于从它们提供访问权限的旧表中读取信息。


简而言之,Django 并不是为此而构建的。让你的模型“不受管理”仅意味着 Django 不会为其创建或删除表——仅此而已 https://docs.djangoproject.com/en/1.7/ref/models/options/#managed.

也就是说,如果您在同一应用程序中没有常规模型和这些动态模型,则可以有条件地将应用程序添加到INSTALLED_APPS in settings.py:

if not ('makemigrations' in sys.argv or 'migrate' in sys.argv):
    INSTALLED_APPS += (
        'app_with_dynamic_models',
        'another_app_with_dynamic_models',
    )

这应该使 Django 在创建和运行迁移时忽略该应用程序。但是,如果您想使用模型,您最终将必须对模型进行并运行迁移,因为Django 1.9 中将不再支持不使用迁移的应用程序 https://groups.google.com/forum/#!topic/django-developers/PWPj3etj3-U。您的动态模型可以重构以使用内容类型框架 https://docs.djangoproject.com/en/1.7/ref/contrib/contenttypes/?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 1.7 - makemigrations 为非托管模型创建迁移 的相关文章

随机推荐