25

私は通常、Django プロジェクトでモデルの事前設計を行わないため、モデルを大幅に変更し、毎回テスト データベースを削除することになります ("syncdb" はテーブルを自動的に変更しないため)。以下は私のワークフローです。あなたのワークフローについてお聞きしたいと思います。どんな考えでも大歓迎..

  1. モデルを修正します。
  2. テスト データベースを削除します。(私にとっては常に単純な sqlite データベースです。)
  3. 「syncdb」を実行します。
  4. コードを使用していくつかのテスト データを生成します。
  5. 1に行きます。

これに関する二次的な質問.. ワークフローが上記のような場合、どのように 4. ステップを実行しますか? テスト データを手動で生成しますか?それとも、サーバーの起動時にテスト データ生成コードを挿入できる Django アプリに適切なフック ポイントがありますか?\

ティア。

4

6 に答える 6

22

ステップ 2 と 3 は 1 つのステップで実行できます。

manage.py reset appname

ステップ 4 は、私の理解では、フィクスチャを使用することで最も簡単に管理できます。

于 2009-01-30T23:29:45.337 に答える
15

これは Django のフィクスチャのジョブです。これらはデータベースに依存せず、テスト ハーネス (および manage.py) に組み込みでサポートされているため便利です。

それらを使用するには:

  1. 管理ツールを使用して、アプリでデータを設定します (「foo」と呼びます)。
  2. 「foo」アプリディレクトリにフィクスチャディレクトリを作成します
  3. タイプ:python manage.py dumpdata --indent=4 foo > foo/fixtures/foo.json

ここで、syncdb ステージの後、次のように入力します。

 python manage.py loaddata foo.json

そして、あなたのデータは再作成されます。

テストケースでそれらが必要な場合:

class FooTests(TestCase):
    fixtures = ['foo.json']

スキーマが大幅に変更された場合は、フィクスチャを再作成するか手動で更新する必要があることに注意してください。

Fixture Loadingの django docs でフィクスチャの詳細を読むことができます

于 2009-01-30T23:32:02.197 に答える
12

これが私たちの仕事です。

  1. アプリには、スキーマのバージョン番号で名前が付けられます。 appa_2appb_1など

  2. 軽微な変更は番号を変更しません。

  3. 大幅な変更により、数値が増加します。同期データベースは機能します。そして、「データ移行」スクリプトを書くことができます。

    def migrate_appa_2_to_3():
        for a in appa_2.SomeThing.objects.all():
            appa_3.AnotherThing.create( a.this, a.that )
            appa_3.NewThing.create( a.another, a.yetAnother )
        for b in ...
    

ポイントは、削除して再作成することが常に適切であるとは限らないということです。ゼロから再構築せずに、古いモデルから新しいモデルにデータを移動すると役立つ場合があります。

于 2009-01-31T02:39:00.573 に答える
11

南が一番かっこいいです。

古き良きリセットは、データが重要でない場合に最適に機能します。

http://south.aeracode.org/

于 2009-03-12T00:33:46.143 に答える
4

マシューの回答に追加するために、ここに記載されているように、カスタム SQL を使用して初期データを提供することもよくあります

Django は、または<app>/sql/<modelname>.sqlでテーブルを作成した後、ファイルを探して実行するだけです。Django 以外のデータベース テーブルから Django テーブルを作成する必要がある場合は、カスタム SQL を使用します。syncdbsqlreset

于 2009-01-31T02:43:29.737 に答える
1

個人的には、現在取り組んでいるプロジェクト用の開発データベースはかなり大きいので、最初に行ったように毎回データベースを消去するのではなく、 dmigrationsを使用してデータベース移行スクリプトを作成し、データベースを変更します。

編集:実際、私は今南を使用しています:-)

于 2009-01-31T02:48:53.907 に答える