Джанго 1.3 и Южная миграция - PullRequest
6 голосов
/ 05 июля 2011

У меня есть существующий проект, который широко использует южные миграции для загрузки данных в свои таблицы.

После обновления до Django 1.3 наши модульные тесты больше не выполняются, поскольку они не могут найти данные, на которые они полагаются.

  1. Это поведение связано с одним из несовместимых назад изменений в 1,3
  2. Есть ли простой способ для меня преобразовать все эти миграции в фиксаторы?

Ответы [ 2 ]

3 голосов
/ 05 июля 2011
  1. Да, это поведение связано с этим изменением.

    Кажется, что есть обходной путь в южном стволе (см. https://bitbucket.org/andrewgodwin/south/changeset/21a635231327), поэтому вы можете попробовать южную версию разработки (она достаточно стабильна в моем опыте).

  2. Вы можете попытаться изменить имя БД в настройках (чтобы получить чистую среду), запустить ./manage.py syncdb и ./manage.py migrate, а затем выполнить ./manage.py dumpdata

0 голосов
/ 26 марта 2013

Я затронул эту проблему сегодня. В конце концов я закончил рефакторинг своих миграций, чтобы они использовали вспомогательные функции для вставки данных, а затем вызывал те же функции из setUp () моих тестов.

Некоторые подсказки;

  • Заставьте ваши вспомогательные функции принимать класс модели в качестве аргумента, чтобы вы могли вызывать их с помощью orm ['yourapp.YourModel'] из миграции и с models.YourModel из теста. Это также показывает основное ограничение: South работает для моделей, схема которых изменилась с тех пор, тестовый код не может этого сделать. Мне повезло, что эта конкретная модель не изменилась.

  • Если вы хотите сохранить вспомогательные методы внутри миграций, вы обнаружите, что не можете напрямую импортировать yourapp.migrations.0001_some_migration, поскольку идентификаторы не могут начинаться с цифр. Используйте что-то вроде migration_0001 = importlib.import_module('yourapp.migrations.0001_some_migration') вместо оператора импорта.

...