我有一個使用多個數據庫的django應用程序。給定一個模型的實例,如何獲取存儲數據庫的位置(如果有的話)?我需要這個將另一個對象保存爲與第一個數據庫相同的。如何獲取將模型實例保存到Django的數據庫?
def add_ducks_to_hunt(hunter):
db = # the hunter's db
duck = Duck()
duck.save(using=db)
我有一個使用多個數據庫的django應用程序。給定一個模型的實例,如何獲取存儲數據庫的位置(如果有的話)?我需要這個將另一個對象保存爲與第一個數據庫相同的。如何獲取將模型實例保存到Django的數據庫?
def add_ducks_to_hunt(hunter):
db = # the hunter's db
duck = Duck()
duck.save(using=db)
我相信你正在尋找項目(頂級)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
沒有辦法從模型實例本身直接獲取信息。啊,_state,是的。它應該像使用內置方法一樣明確地傳入'using'參數。或者可以通過查看模型實例的一些事實來推導DB使用的設計路由器,這裏是獵人。
如果您始終將模型保存在同一個數據庫中,則可以將該信息存儲在模型類中,然後在需要時使用它。可能不是pythonic,但它可能會伎倆。
Class Hunter(models.Model):
# ... other stuff
db = 'hunter_db'
訪問它,然後用__class__
:
def add_ducks_to_hunt(hunter):
db = hunter.__class__.db
duck = Duck()
duck.save(using=db)
在另一方面,如果你救了一個類的對象在不同的數據庫,比我看到的比寫的每個對象的id和db沒有其他辦法將對象的save()名稱添加到某個表中,您可以隨時訪問它並使用該信息加載對象。
這正是我需要的,謝謝。我已經閱讀了*多個數據庫*文檔,但我錯過了這一行。 – 2012-04-01 18:34:34