Desde Django 1.2, puede definir múltiples conexiones de base de datos en su settings.py
. Entonces puede usar enrutadores de base de datos para decirle a Django a qué base de datos ir, de forma transparente para su aplicación.
Descargo de responsabilidad: así es como pienso debería funcionar, nunca he usado MongoDB en Django, ni he probado que mi código realmente funcione. :)
configuraciones.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'mydata',
...
}
'geodata' {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'geodata',
...
}
}
DATABASE_ROUTERS = ['path.to.ModelMetaRouter']
Modelos
Luego, agregue meta variables personalizadas a sus tablas geográficas para anular su base de datos. No agregue este atributo a los modelos que se supone que deben ir a la base de datos predeterminada.
class SomeGeoModel(models.Model):
...
class Meta:
using = 'geodata'
Enrutador de base de datos
Y escriba un enrutador de base de datos para dirigir todos los modelos que tienen el using
conjunto de metaatributos, a la conexión apropiada:
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