2011-07-05 19 views
6

南の移行を広範囲に使用してデータをテーブルにロードする既存のプロジェクトがあります。Django 1.3と南の移行

Django 1.3にアップグレードして以来、ユニットテストは依存しているデータが見つからないため、実行されなくなりました。

  1. この動作は1.3
  2. one of the backwards incompatible changesによるものですです私は備品の中にすべてのこれらの移行を変換するための簡単な方法はありますか?
+0

おそらく、各アプリケーションディレクトリ内の 'migrations'フォルダを削除し、' ./manage.py schemamigration app --initial'を実行することができますか?これが機能する場合と動作しない場合があるため、まずすべてのバックアップを作成します。 –

+0

これは私の単体テストでは動作しますが、私の生産システムが壊れるでしょう! –

答えて

3
  1. はい、この動作は、この変更によるものです。

    サウストランク(https://bitbucket.org/andrewgodwin/south/changeset/21a635231327参照)で回避策があるようですので、私の経験ではかなり安定しています。

  2. あなたは、私が今日、この問題をヒット./manage.py dumpdata

+0

これはすばらしい答えです! –

+0

2012-01-19のように、まだ修正されていない南のリリースはありませんが、トランクから南をピップすることができます: 'pip install hg + https://bitbucket.org/andrewgodwin/south ' *しかし* - それは私が言うことができる限り問題を解決しません... – hwjp

0

を行い、その後、(クリーンな環境を得るために)設定でDB名を変更しようと./manage.py syncdbを実行し、./manage.py migrateとします。最終的に私はマイグレーションをリファクタリングして、実際にデータを挿入し、テストのsetUp()から同じ関数を呼び出すヘルパー関数を使用するようにしました。

いくつかのヒント。

  • あなたはORMのでそれらを呼び出すことができますので、あなたのヘルパー関数は、引数としてモデルクラスを取るください[「yourapp.YourModel」]テストからの移行からとmodels.YourModelで。それはまた、主な制限を示しています。それ以来、スキーマが変更されたモデルではSouthが動作しますが、テストコードではそのことができません。この特定のモデルが変更されていないという点で私は運が良かったです。

  • 移行の中でヘルパーメソッドを保持したい場合は、識別子が数字で始めることができないため、yourapp.migrations.0001_some_migrationを直接インポートすることはできません。 import文の代わりにmigration_0001 = importlib.import_module('yourapp.migrations.0001_some_migration')のようなものを使用してください。

関連する問題