2010-08-19 20 views
18

Bir modelin (veya uygulamanın, hatta) yalnızca belirli bir veritabanını kullanması gerektiğini belirtmenin bir yolu var mı?Django - bir model için veritabanı nasıl belirlenir?

Değiştirmek istemediğim eski bir veritabanıyla çalışıyorum. İki veritabanım var - 'varsayılan' yönetici vb için kullanılabilecek bir sqlite ve mirasıdır. Eski veritabanı için (bir kısmı) bir model oluşturmak için inspectdb kullandım ve managed = False. Fakat modelin kendisinde sadece belirli bir veritabanı için geçerli olduğunu belirtmenin bir yolu var mı?

Bazı sorgu kümelerinde vb. specify using=databasename görüntüleyebileceğinizi görüyorum ama bu Databrowse (ve muhtemelen genel görünümler?) Gibi şeyler için iyi değil. Veritabanını belirleyemediğiniz kısa bir Databrowse olabilir, ancak modelin belirttiği doğru yer gibi görünüyor ...

O zaman belki de cevabın özel bir yazı yazmak olduğunu sanmıştım. model manager sadece eski veri tabanımla ilgilidir - ancak dokümanlar böyle bir şeyden bahsetmez.

Django dünyasına birden fazla veritabanının nasıl kullanılabileceği konusunda farklı bir zihinsel modelim var mı?

cevap

2

Model için bir veritabanı belirtebilirsiniz, ancak bunu özel bir DB yönlendirici sınıfında tanımlayabilirsiniz.

# 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': { 
     .... 
    } 
} 
İlgili konular