迁移应用程序中缺少 django 1.9 models_module

Posted

技术标签:

【中文标题】迁移应用程序中缺少 django 1.9 models_module【英文标题】:django 1.9 models_module missing in migration apps 【发布时间】:2016-05-22 21:40:43 【问题描述】:

我正在从 django 1.8 迁移到 django 1.9。

我有一个迁移,它添加了一个组 user,然后向该组添加了一个权限 django_comments.add_comment。使用 django 1.8 的迁移看起来像这样

从 django.contrib.contenttypes.management 导入 update_contenttypes 从 django.contrib.auth.management 导入 create_permissions def create_perms(apps, schema_editor): update_contenttypes(apps.get_app_config('django_cmets')) create_permissions(apps.get_app_config('django_cmets')) Group = apps.get_model('auth', 'Group') 组=组(名称='用户') group.save() commentct = ContentType.objects.get_for_model(apps.get_model('django_cmets', 'comment')) group.permissions.add([Permission.objects.get(codename='add_comment', content_type_id=commentct)]) group.save() 类迁移(migrations.Migration): 依赖= [ ('contenttypes', '0002_remove_content_type_name'), ('django_cmets', '0002_update_user_email_field_length') ] 操作 = [ migrations.RunPython(create_perms, remove_perms) ]

升级到 django 1.9 时,由于找不到内容类型,这会引发错误。这是因为当update_contenttypes 调用没有创建必要的content_types。该函数中有这一行(django's source code reference)

def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT_DB_ALIAS, **kwargs): 如果不是 app_config.models_module: 返回 ...

app_config.models_module 在 django 1.9 中是 None,但在 django 1.8 中不是 None

如果我用这个代码替换它

def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT_DB_ALIAS, **kwargs): 如果不是 app_config.models_module: #返回 经过 ...

然后一切正常。

问题是我不想更改 django 的核心代码。如何在 django 1.9 中完成这项工作?

【问题讨论】:

【参考方案1】:

好的,感谢#django IRC(用户 knbk)中的一些帮助,我找到了一个丑陋的解决方法,但至少它有效!

改变这两行

update_contenttypes(apps.get_app_config('django_cmets')) create_permissions(apps.get_app_config('django_cmets'))

改写这个

app = apps.get_app_config('django_cmets') app.models_module = app.models_module 或 True 更新内容类型(应用程序) 创建权限(应用程序)

现在它工作得很好。

【讨论】:

使用 Django 1.11 update_contenttypes 不再存在,改用 create_contenttypes

以上是关于迁移应用程序中缺少 django 1.9 models_module的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.9 在迁移中删除外键

如何在 django 1.9+ 中合并连续的数据库迁移?

刷新单应用程序 django 1.9

尝试在 Django 1.9 中迁移——奇怪的 SQL 错误 "django.db.utils.OperationalError: near ")": syntax er

Python Django 1.9 迁移错误“创建新内容类型时出错...”

具有默认值的外键上的 Django 1.7 迁移错误