【问题标题】:django 1.9 models_module missing in migration apps迁移应用程序中缺少 django 1.9 models_module
【发布时间】: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 中完成这项工作?
【问题讨论】:
标签:
django
migration
django-migrations