От Django 1.2 можете да дефинирате множество връзки към база данни във вашия settings.py
. След това можете да използвате рутери за бази данни да кажете на Django коя база данни да отиде, прозрачно за вашето приложение.
Отказ от отговорност: така мисля би трябвало да работи, никога не съм използвал MongoDB в Django, нито съм тествал дали кодът ми действително работи. :)
settings.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'mydata',
...
}
'geodata' {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'geodata',
...
}
}
DATABASE_ROUTERS = ['path.to.ModelMetaRouter']
Модели
След това добавете персонализирани мета променливи към вашите географски таблици, за да замените тяхната база данни. Не добавяйте този атрибут към модели, за които се предполага, че отиват в базата данни по подразбиране.
class SomeGeoModel(models.Model):
...
class Meta:
using = 'geodata'
Рутер за база данни
И напишете рутер за база данни, който да насочва всички модели, които имат using
набор от мета атрибути към съответната връзка:
class ModelMetaRouter(object):
def db_for_read(self, model, **hints):
return getattr(model._meta, 'using', None)
def db_for_write(self, model, **hints):
return getattr(model._meta, 'using', None)
def allow_relation(self, obj1, obj2, **hints):
# only allow relations within a single database
if getattr(obj1._meta, 'using', None) == getattr(obj2._meta, 'using', None):
return True
return None
def allow_syncdb(self, db, model):
if db == getattr(model._meta, 'using', 'default'):
return True
return None