lЗагрузить фикстуру в миграциях django с использованием loaddata

Моему приложению django нужны данные для правильной работы, поэтому при определенной миграции я загружал данные, используя рекомендуемый метод, почти во всех ответах на переполнение стека:

    from django.core.management import call_command

    def load_fixture(apps, schema_editor):
        call_command('loaddata', 'fixture_name', app_label='my_app')

    class Migration(migrations.Migration):

        ...

        operations = [
            migrations.RunPython(load_fixture),
        ]

В следующей миграции я удалил поле и добавил другое поле. Все идет нормально.

Теперь я хочу протестировать свое приложение, но когда создается тестовая база данных, приведенная выше команда call_command не работает, потому что в фикстурах не указаны значения для поля, созданного при следующей миграции. Я подозреваю, что это связано с тем, что call_command загружает объекты не в тестовую базу данных, а в settings.DATABASES['default'].

Как мне загружать фикстуры при миграции, чтобы я мог создавать тестовые базы данных?


person Marco Lavagnino    schedule 02.09.2015    source источник


Ответы (1)


Я знаю, что для тестов вы можете загружать фикстуры в Djangos TestCase, см. документация django

Для производства подход, который вы используете с использованием loaddata, кажется жизнеспособным, но вам необходимо убедиться, что ваши приборы поддерживаются в актуальном состоянии (как вы подчеркнули), поскольку вставка приборов довольно сильна, альтернативой является создание ваших моделей с использованием ORM внутри операции RunPython это может помочь им быть более гибкими.

В Django есть запрос функции для чего-то более official, хотя я не уверен, что это рассматривается или нет, но это только добавит удобства для загрузки фикстур, а не способ сделать фикстуры динамическими.

этот другой пост о переполнении стека содержит некоторые другие интересные подходы

Надеюсь, что это в чем-то полезно

person farridav    schedule 11.12.2015