Source code for erecord_cmn.router

# -*- coding: utf-8 -*-
"""erecord_cmn.router

Database router, for multiple databases case

"""

[docs]class DatabaseRouter(object): """ A router to control all database operations on models in an application. DatabaseRouter is an abstract class, to be heritated by an application in multiple databases case. The child class defines db_name and app_name. """
[docs] def db_for_read(self, model, **hints): """ Attempts to read app_name models go to db_name. """ if model._meta.app_label == self.app_name: return self.db_name return None # no suggestion
[docs] def db_for_write(self, model, **hints): """ Attempts to write app_name models go to db_name. """ if model._meta.app_label == self.app_name: return self.db_name return None # no suggestion
[docs] def allow_relation(self, obj1, obj2, **hints): """ Allow relations if a model in the app_name app is involved. """ if obj1._meta.app_label == self.app_name or \ obj2._meta.app_label == self.app_name: return True return None
[docs] def allow_syncdb(self, db, model): """ Make sure the app_name app only appears in the db_name database. """ if db == self.db_name: return model._meta.app_label == self.app_name elif model._meta.app_label == self.app_name: return False return None
[docs] def allow_migrate(self, db, model): """ Make sure the app_name app only appears in the db_name database. """ if db == self.db_name: return model._meta.app_label == self.app_name elif model._meta.app_label == self.app_name: return False return None