You need to implement a database router, as detailed in the documentation:
If you don’t want every application to be synchronized onto a
particular database, you can define a database router that implements
a policy constraining the availability of particular models.
To define your router, its just a class with some methods:
class MyRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'yourappname':
return 'local_mysql'
return None
def db_for_write(self, model, **hints):
return self.db_for_read(model, **hints)
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'yourappname' or \
obj2._meta.app_label == 'yourappname':
return True
return None
def allow_migrate(self, db, model):
if db == 'local_mysql':
return model._meta.app_label == 'yourappname'
elif model._meta.app_label == 'yourappname':
return False
return None
Put this class in a file called routers.py
in the same location as views.py
for your app, for which you want to redirect the database.
Then, in settings.py
, add the following:
DATABASE_ROUTERS = ['yourappname.routers.MyRouter']