一部の権限を更新するデータ移行があります。移行のアクセス許可にはいくつかの既知の問題があることを知っており、移行自体でアクセス許可を作成することで (モデルでタプル ショートカットを使用するのではなく)、いくつかの問題を回避できました。
移行:
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
テストで実行すると、移行のこの時点で何もないことが少し発見されました(理由はわかりません)。この投稿のアドバイスに従って、移行自体でコンテンツ タイプを手動で更新しようとしました。追加した :
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'])
なぜこれがすべて必要なのか知りたいです