gpt4 book ai didi

django - 在迁移中获取模型 ContentType - Django 1.7

转载 作者:行者123 更新时间:2023-11-28 19:35:17 25 4
gpt4 key购买 nike

我有一个更新某些权限的数据迁移。我知道迁移中的权限存在一些已知问题,我能够通过在迁移中自行创建权限(而不是在模型中使用元组快捷方式)来避免一些麻烦。

迁移:

from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings

def create_feature_groups(apps, schema_editor):
app = models.get_app('myauth')

Group = apps.get_model("auth", "Group")
pro = Group.objects.create(name='pro')

Permission = apps.get_model("auth", "Permission")
ContentType = apps.get_model("contenttypes", "ContentType")
invitation_contenttype = ContentType.objects.get(name='Invitation')

send_invitation = Permission.objects.create(
codename='send_invitation',
name='Can send Invitation',
content_type=invitation_contenttype)

pro.permissions.add(receive_invitation)

class Migration(migrations.Migration):

dependencies = [
('myauth', '0002_initial_data'),
]

operations = [
migrations.RunPython(create_feature_groups),
]

经过反复试验,我能够使用 manage.py migrate 完成这项工作,但我在测试 manage.py test 时遇到错误。

__fake__.DoesNotExist: ContentType matching query does not exist.

调试了一下,发现在测试运行时迁移中此时没有ContentType(不知道为什么)。遵循此 post 中的建议我尝试在自己的迁移中手动更新内容类型。添加:

from django.contrib.contenttypes.management import update_contenttypes
update_contenttypes(app, models.get_models())

在获取 Invitation 模型的内容类型之前。出现以下错误

  File "C:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\contrib\contenttypes\management.py", line 14, in update_contenttypes
if not app_config.models_module:
AttributeError: 'module' object has no attribute 'models_module'

必须有某种方法以可测试的方式在数据迁移中创建/更新权限。

谢谢。

编辑

最后通过添加使其工作

from django.contrib.contenttypes.management import update_all_contenttypes
update_all_contenttypes()

奇怪的是这个还不够

update_contenttypes(apps.app_configs['contenttypes'])

我很想知道为什么所有这些都是必要的

最佳答案

答案是:

apps.get_model('contenttypes', 'ContentType') 

:) 今天我自己需要它。

关于django - 在迁移中获取模型 ContentType - Django 1.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26464838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com