2011-11-29 10 views
26

Djangoのdumpdata管理コマンドが出力するレコードを選択的にフィルタリングできますか?私はいくつかのモデルを持っていて、それぞれが何百万という行を持っています。特定の基準に合致するレコードを1つのモデルにダンプするだけでなく、それらのレコードを参照するすべての外部キーリンクレコードもダンプします。Djangoの選択的ダンプデータ

この使用例を検討してください。ユーザーモデルに何百万ものレコードがある本番データベースがあるとします。私は、Userモデルを参照するいくつかの他のモデル(ログ、トランザクション、購入、ブックマークなど)を持っています。私は私のDjangoアプリケーションの開発をしたい、と私は現実的なデータを使用してテストしたい。しかし、私の本番データベースは非常に巨大なので、現実的には全体のスナップショットを作成してローカルにロードすることはできません。理想的には、dumpdataを使用して50個のランダムなユーザーレコードとすべての関連レコードをJSONにダンプし、それを使用して開発データベースを作成することが理想的です。

これを行う簡単な方法はありますか?

+1

良い質問です。また、このテストデータを公開する場合は、フィールドなど一部のフィールド(パスワードなど)を削除することもあります。 – Mitar

答えて

16

私はdjango-fixture-magicと思うかもしれません。

Scrubbing your Django databaseに追加の背景情報があります。

+0

私はこのコードを少し微調整しなければなりませんでしたが、それでも少し効率が悪いですが、これは一般的に私には役に立ちます。 – Cerin

+0

ええ、私もそうです:https://github.com/davedash/django-fixture-magic/issues/45 – daigorocub

3

これは私の質問に対する簡単な答えではありませんが、Djangoの組み込みのnatural keys featureに関する興味深いドキュメントが見つかりました。これにより、プライマリキーなしでシリアル化されたレコードを表すことができます。残念ながら、これは完全にdumpdataに統合されているようには見えません。また、自然キーに完全に依存する古いoutstanding ticketがあります。

serializers.serialize()関数は、特定のモデルインスタンスの任意のリストのシリアル化を可能にするようです。

おそらく、すべてのモデルでnatural_key()メソッドを実装してからserializers.serialize([Users.objects.filter(criteria)])を呼び出すと、私は自分が望むことを達成することに近づくはずです。私はすべてのFK参照をクロールする関数を記述し、serialize()に渡されたオブジェクトのリストにそれらを含める必要があります。

5

このコードは、(それが関係をたどり、それらをシリアライズ)あなたのために役に立つかもしれません:

あなたはまた、その管理コマンドを使用して、カスタム返したい方のモデルのデフォルトの管理者をオーバーライドすることができます

http://djangosnippets.org/snippets/918/

クエリーセット。

+1

上記スニペットの固定/更新フォーク:https://djangosnippets.org/snippets/10506/ – tutuDajuju

関連する問題