2010-08-19 25 views
18

有沒有辦法指定模型(或應用程序,甚至)應該只使用一個特定的數據庫?Django - 如何爲模型指定數據庫?

我正在使用我不想更改的遺留數據庫。我有兩個數據庫 - 「默認」是一個可以用於管理等的sqlite和傳統的數據庫。我使用inspectdb爲遺留數據庫(的一部分)創建模型,它有managed = False。但是有沒有一種方法可以在模型中指定它只適用於特定的數據庫?

我看到你可以在一些查詢集合中使用specify using=databasename等,但是這對Databrowse(也可能是泛型視圖)沒有好處。這可能是Databrowse的一個短命,你不能指定一個數據庫,但它似乎是正確的地方,指定它是模型...

然後,我想也許答案是寫一個自定義model manager這只是指我的遺留數據庫 - 但文檔沒有提到這樣的事情。

難道我只是有一個不同的心理模型,可以使用多個數據庫到Django世界嗎?

回答

2

您不能爲模型指定數據庫,但可以在自定義數據庫路由器類中定義它。

# app/models.py 
class SomeModel(models.Model): 
    ... 

# app/dbrouters.py 
from app.models import SomeModel 
... 
class MyDBRouter(object): 

    def db_for_read(self, model, **hints): 
     """ reading SomeModel from otherdb """ 
     if model == SomeModel: 
      return 'otherdb' 
     return None 

    def db_for_write(self, model, **hints): 
     """ writing SomeModel to otherdb """ 
     if model == SomeModel: 
      return 'otherdb' 
     return None 


# app/settings.py 
DATABASE_ROUTERS = ('app.dbrouters.MyDBRouter',) 
... 
DATABASES = { 
    ... 
    'otherdb': { 
     .... 
    } 
}