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

乍得

我在应用程序中创建了一些动态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类中的设置?

更新:为澄清起见,我正在使用一种方法来创建我的动态模型,该模型类似于在以下地方描述的模型:

此方法非常适合根据配置模型(https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach)中存储的信息生成动态模型我确实必须注册一个信号来清除django模型缓存,以便在更改Configuration实例时捕获对模型的更改,但是除了为这些模型生成了迁移这一事实以外,其他一切似乎都运行良好。如果我删除其中一种配置,并且从Django的缓存中删除了模型,则需要再次更新迁移,从而删除不需要的模型。

这些动态模型没有在应用程序中专门使用。我没有在代码中引用书本模型(在上面的示例中)。它们在运行时生成,用于从它们提供访问权限的旧表中读取信息。

丹尼尔·霍金斯(Daniel Hawkins)

简短的答案是Django不是为此而构建的。将模型设为“非托管”仅意味着Django不会为其创建或删除表-别无其他

也就是说,如果您在同一应用中没有常规模型以及这些动态模型,则可以有条件地将应用添加到INSTALLED_APPSsettings.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中,具有不使用迁移功能的应用程序的能力将消失是否可以将您的动态模型重构为使用contenttypes框架

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django Mysql不迁移模型

Django为什么要为代理模型创建迁移文件?

Django 1.8:为现有架构创建初始迁移

删除所有实例后,Django模型实例的主键不会重置为1

联系表格7:仅将ID为1的联系表格使用通过wpcf7_before_send_mail创建的挂钩

Django makemigrations未检测到新模型

Django 1.10-makemigrations命令未检测到非托管模型的更改

如何在Python中将-1 /(-343)^(1/3)计算为1/7?

每次运行makemigrations时,Django模型的enum字段都会创建新的迁移,即使未更改

Django迁移:使用makemigrations创建相同的迁移

django:为模型创建子模型

Django迁移为第二个模型

的Django 2模型1

创建重命名文件的功能后,Django无法迁移模型

Django makemigrations正在为托管= False的模型创建迁移

具有非托管类的Django模型类继承

Windows 7:两台监视器(纵向为1个,横向为1个)

在Windows 7中创建降级RAID 1

Django模型无法迁移

django CMS模型迁移

Django makemigrations不会按models.py中的顺序创建模型

Django模型可为空的字段错误makemigrations

没有为 Django 迁移创建模型表

为外部导入的表创建django模型

创建临时表以在 Django 中测试非托管模型

Django ORM bulk_create 1:1 相关模型

如何使用多对多关系与不同 PostgreSQL 模式中的表创建 Django 模型,一个模型仅使用非托管表的一部分

Django 为继承模型应用迁移

为食谱创建 Django 模型