Solution pour utiliser 2 bases de données avec plusieurs modèles. Dans le fichier settings.py, définir les 2 bdds:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',
'USER': 'mega_user',
'PASSWORD': 'mega_mot_de_passe',
'HOST': '192.168.55.4',
'PORT': '3306',
},
'treco_facturation': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_trecobat',
'USER': 'mega_user2',
'PASSWORD': 'mega-Mot_de_passe2',
'HOST': '192.168.55.5',
'PORT': '3306',
}
}
Sur chaque modèle, déclarer la BDD à utiliser :
_DATABASE = "default" ou _DATABASE = "treco_facturation"
Dans l’application créer un fichier (ex:db_router.py) qui va contenir le détail du routage des bases de données:
class TrecoRouter(object):
def db_for_read(self, model, **hints):
database = getattr(model, "_DATABASE", None)
if database:
return database
else:
return "default"
def db_for_write(self, model, **hints):
database = getattr(model, "_DATABASE", None)
if database:
return database
else:
return "default"
def allow_relation(self, obj1, obj2, **hints):
db_list = ('default')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, model):
return True
Enfin, dans le settings.py, après la définition des bases de données, on rajoute la ligne indiquant qu’il y a un routage et ou le trouver (ex: numeros.db_router.TrecoRouter)
DATABASE_ROUTERS = ['NOM_APP.NOM_FICHIER.NOM_CLASSE']
Et voilà.
Source stackoverflow, plus d’infos sur le routage chez django