5

Django アプリケーションでフィクスチャを使用していますが、2 つのアプリだけがフィクスチャをロードしています。

--verbosity=2 を指定して loaddata を手動で実行すると、2 つのアプリしか表示されないことがわかりますが、内部にフィクスチャ ディレクトリが作成されています。

すべてのアプリが settings.py に正しくインストールされています。

ドキュメントから、Django はインストールされているすべてのアプリケーションの Fixtures/ ディレクトリを検索するようになっているようです。

一部のアプリが無視される理由はありますか?

4

4 に答える 4

6

Initial_data は、syncdb を実行するたびにインポートされます。私が覚えている限りでは、手動で行った変更も上書きされます。

他のフィクスチャをロードするには、manage.py loaddataフィクスチャ名を使用する必要があります。すべてのアプリで共通の命名スキームを使用している場合、これはうまく機能します。そうでない場合は、loaddata にそれぞれの名前を付けるか、find を使用してフィクスチャのリストを取得し、それぞれのフィクスチャで loaddata を実行する必要があります。

編集:(djangoパッケージをインストールするときにmanage.pyをvirtualenvの/ binに追加するので、manage.pyのみを使用します。使用しない場合は、もちろんpython manage.py loaddataが必要です)

find . -name "*.json" -exec manage.py loaddata {} \;

これを fabfile で使用して、ステージング インストールを自動化します。

def load_all_fixtures():
    """Loads all the fixtures in every dir"""
    with cd(env.directory):
        run("""
            source /usr/local/bin/virtualenvwrapper.sh &&
            workon %s &&
            find -L . -name "*.json" -exec manage.py loaddata {} \;

            """ % env.virtualenv )
于 2011-05-31T10:56:56.977 に答える
4

問題は、Django がモデルを提供するアプリ内のフィクスチャのみを検索することです。モデルを持たないアプリを持っている可能性がありますが、いくつかのフィクスチャ (別のインストール済みアプリのサンプル データなど) をロードしたい場合があります。

Django でのこの動作の原因は次get_apps()loaddata.pyとおりです。

  1. django.core.management.commands.loaddata、102行目
  2. django.db.models.loading、132行目

Django をだましてアプリの<app>/fixtures/フォルダーを調べるには、(空の)models.pyファイルをアプリに追加する必要があります。(親切にして、そのファイルにコメントを入れて、物事を明確にしてください!)

<アプリ>/models.py

"""
No real model, just an empty file to make Django load the fixtures.
"""

その後、python manage.py loaddata <fixture>手動で実行すると、アプリのフィクスチャ ファイルが見つかります。

于 2014-06-27T20:26:02.823 に答える
3

フィクスチャ データを initial_data.[json|xml,...] ファイルに配置する必要があります。

デフォルトではそれらのファイルのみが読み込まれると思います。

appdir/fixtures/initial_data.json

于 2011-03-02T13:24:26.830 に答える