1

を使用してDjango (1.9.6)おりpytest (2.9.2)pytest-django (2.9.1)

次のようなデータ移行があります。

# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-07 09:56
from __future__ import unicode_literals

from django.db import migrations


def create_groups(apps, schema_editor):
    Group = apps.get_model('auth', 'group')
    Permission = apps.get_model('auth', 'permission')

    group1 = Group.objects.create(name='grou1')
    group1_permissions = Permission.objects.filter(codename__in=[
        'add_app1_model',
        'add_app2_model',
        'custom_permission_app1_model'
    ])
    group1.permissions.add(*list(group1_permissions))

    group2 = Group.objects.create(name='group2')
    group2_permissions = Permission.objects.get(
        codename='custom_permission_app2_model'    
    )
    group2.permissions.add(*list(group2_permissions))


class Migration(migrations.Migration):

    dependencies = [
        ('app1', '0001'),
        ('app2', '0001')
    ]

    operations = [
        migrations.RunPython(create_groups)
    ]

でマークされているpy.test --create-dbすべてのテストを実行すると、移行の操作で発生します。pytest.mark.django_db__fake__.DoesNotExist: Permission matching query does not exist.get

移行をデバッグすると、操作が機能することがわかりましたcreateが、filter操作は常に空を返します。テスト データベースにはグループが作成されていますが、どのグループにも権限が関連付けられていません。

私は何か間違ったことをしているかどうかわかりませんか?私が行った一時的な修正は、 を に変更することでしたgetfilterこれにより、移行が正常に実行されます。テストでは、必要な権限をユーザーに割り当てるフィクスチャがあります。ユーザーがグループに属しているかどうかではなく、すべてのコードがアクセス許可に対してチェックするため、すべてのテストに合格します。

4

1 に答える 1