2011-11-02 14 views
6

DjangoのORMは、フィルターベースの操作の.using()関数を使用して、特定のデータベース(複数のプロジェクトが定義されている場合)からのクエリをサポートします。複数のデータベースでDjango ORM get_or_createを使用する

MyModel.objects.filter(name='Bob').using('my_non_default_database')

MyModel()クラスまたはget_or_create()のようなショートカットを使用して、新しいレコードを作成するときはどうしたらよいでしょうか?

答えて

10

usingMyModel.objectsマネージャのメソッドなので、あなたがmymodelというインスタンスを持っている場合は、あなたが保存するデータベースを指定するために使用したキーワードを使用することができます

MyModel.objects.using('my_non_default_database').get_or_create(name="Bob") 

を行うことができます。 django docsはいくつかの問題を指摘しています。

my_model = MyModel(name="Bob") 
my_model.save(using='my_non_default_database') 
+0

通常のモデル作成ではどのように処理されますか?例えばMyModel(name = 'bob') – Cerin

+1

保存にはキーワード引数 'using'があります。私は私の答えを更新しました。 – Alasdair

4

usingは、標準的なクエリチェーンの一部です。したがって、クエリがDBに送信される前にどこでも使用できます。 get_or_createは、filterとは異なり、アトミックである:あなたがそれを呼び出すと、それは即座に行われるので、その前にusingを呼び出すだけでよい。

MyModel.objects.using('my_non_default_database').get_or_create(name='Bob') 
関連する問題