Запуск кода graphene перед миграцией данных django
Я написал кусок кода, который генерирует тип входного объекта графена динамически из базы данных. когда я пытаюсь запустить
./manage.py migrate
этот код работает до миграции и вызвал
django.db.utils.ProgrammingError
У меня такая же проблема при выполнении Pytest. Как я могу предотвратить выполнение этого кода до миграции данных
Я нашел этот код на pytest django GitHub issue для разблокирования ограничения базы данных в py test hook.
import pytest
from pytest_django.plugin import _blocking_manager
from django.db.backends.base.base import BaseDatabaseWrapper
@pytest.hookimpl(tryfirst=True)
def pytest_load_initial_conftests(early_config, parser, args):
_blocking_manager.unblock()
_blocking_manager._blocking_wrapper = BaseDatabaseWrapper.ensure_connection
и вызовите этот хук в pytest.ini с аргументом -p
Не похоже, что это проблема с pytest, поскольку вы сталкиваетесь с этим и при обычных миграциях. Можем ли мы увидеть ваш файл миграции/миграции данных? Обычно миграция данных выполняется после создания таблицы.
import django.db.models.deletion
from django.db import migrations, models
def populate_document_owners(apps, schema_editor):
Document = apps.get_model('some_schema', 'Document')
User = apps.get_model('some_schema', 'User')
owner_of_all_docs = User.objects.first()
for d in Document.objects.all():
d.user = owner_of_all_docs
d.save()
class Migration(migrations.Migration):
dependencies = [
('some_schema', '0100_previous_migration'),
]
operations = [
migrations.AddField(
model_name='document',
name='owner',
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name='documents',
to='some_schema.user',
),
),
migrations.RunPython(populate_document_owners),
]