Pytest - Доступ к БД изнутри метода setup_class

Мне нужно иметь доступ при создании изнутри метода setup_class. Например:

@pytest.mark.django_db
class TestPerson:

    @classmethod
    def setup_class(cls):
        Person.objects.create(first_name='John', last_name='Snow')  # here error happens

    def setup_method(self):
        Person.objects.create(first_name='John', last_name='Snow')

    def test_1(self):
        assert True

Произошел сбой с ошибкой:

RuntimeError: Доступ к базе данных не разрешен, используйте метку "django_db", или фиксы "db" или "transactional_db", чтобы разрешить его.

Для метода setup_method он работает нормально. Я провел некоторое исследование в исходном коде pytest и нашел место, где обычный метод класса setup_method становится фикстурой pytest.

Поэтому я попытался реализовать тот же подход:

def make_setup_class_as_fixture(klass):
    old_setup_class = klass.setup_class

    @pytest.fixture(scope='class', autouse=True)
    def new_setup_class(cls):
        old_setup_class(cls)

    klass.setup_class = new_setup_class

    return klass


@make_setup_class_as_fixture
@pytest.mark.django_db
class TestPerson:

    def setup_class(cls):
        Person.objects.create(first_name='John', last_name='Snow')

    def setup_method(self):
        Person.objects.create(first_name='John', last_name='Snow')

    def test_1(self):
        assert True

Но снова сбой с той же ошибкой.

Как это исправить?

Вернуться на верх