2012-03-29 7 views
0

私は複数のデータベースを使用してdjangoアプリケーションを持っています。モデルのインスタンスがある場合、データベースが格納されているデータベースがあれば、それをどのように取得できますか?別のオブジェクトをに保存するには、最初と同じデータベースが必要です。モデルインスタンスがDjangoに保存されたデータベースを取得するには?

def add_ducks_to_hunt(hunter): 
    db = # the hunter's db 
    duck = Duck() 
    duck.save(using=db) 

答えて

2

使用_state.db、のように:

my_obj = MyModel.objects.get(pk=1) 
my_obj._state.db 

これはrouting exampleに示されています。

+0

これは私が必要としていたものです。ありがとうございます。私は*複数のデータベース*ドキュメントを読んだが、私はその行を逃した。 –

0

あなたはプロジェクト(最上位)Djangoディレクトリのsettings.pyを探していると思います。そうでない場合は、さらに情報を投稿しますか?

Djangoプロジェクトディレクトリ/ home/amr/django/amrのsettings.pyファイルがあります。

import os 
DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    # ('Somone R. Somebody'[email protected]'), 
) 

MANAGERS = ADMINS 

DATABASES = { 
    'default': { 
     #'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
     'ENGINE': 'mysql', 
     'NAME': 'some-server-name',      # Or path to database file if using sqlite3. 
     'USER': '<user>',      # Not used with sqlite3. 
     'PASSWORD': 'xxxxxxxx',     # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

SESSION_COOKIE_AGE = 15 * 60 * 60  # Age of cookie, in seconds 
0

モデルインスタンス自体から情報を直接取得する方法はありません。ああ、_state、はい。その組み込みメソッドと同様に、 'using'パラメータを明示的に渡す必要があります。またはモデルのインスタンスのいくつかの事実、ここではハンターをチェックすることによって使用するDBを推測できるルータを設計してください。

0

モデルを常に同じデータベースに保存する場合は、その情報をモデルクラスに保存して、必要なときに使用することができます。たぶん非常にpythonicではないかもしれませんが、それはトリックを行うかもしれません。 __class__と、その後

Class Hunter(models.Model): 
    # ... other stuff 
    db = 'hunter_db' 

アクセスを:一方

def add_ducks_to_hunt(hunter): 
    db = hunter.__class__.db 
    duck = Duck() 
    duck.save(using=db) 

、私は、各オブジェクトのidとDBを書くよりも、他の方法を見ていないよりも、あなたは、異なるデータベースに一つのクラスのオブジェクトを保存した場合オブジェクトのsave()の名前をどこかのテーブルに渡して、いつでもアクセスしてその情報を使ってオブジェクトをロードすることができます。

関連する問題