How can we work with multiple databases on Django, under some specific conditions such as,
1. One DB for write purpose only ( db_for_write.sqlite3)
2. Two other DB for reading purposes (read_replica_1.sqlite3 ,read_replica_2.sqlite3)
3. All these 3 DB should be synchronized all the time (3 DB should contain same data all the time)
4. All the actions such as CRUD , migration etc are independent of app or model
this is my Db_Router.py
import random
class ExampleDatabaseRouter(object):
    def db_for_read(self, model, **hints):
        db_list = ('db_for_read_1', 'db_for_read_2')
        return random.choice(db_list)
    def db_for_write(self, model, **hints):
        return 'db_for_write_only'
    def allow_relation(self, obj1, obj2, **hints):
        # I couldn't understand what would do this method
        return
    def allow_migrate(self, db, app_label, model_name=None, **hints):
        # sync all DB
        return
 Unfortunately, I couldn't understand the purpose of allow_relation() method. I hope someone could help me.
 
                        
From the documentation,
As in the documentation, this method only determines if the objects passed into it are eligible to create a relation between them. When using multiple databases, there may arise a situation where tables from separate databases require a relationship between them, but Django currently doesn't support these kind of relationships, which are often referred as
cross-database relationships. This is because of referential integrity. In order to maintain a relationship between two objects, Django needs to know that the primary key of the related object is valid. If the primary key is stored on a separate database, it’s not possible to easily evaluate the validity of a primary key.If you need to look more into cross-database relationships, then django documentation provides a much better explanation.
Actually, Django documentation covers pretty much everything about routers. A pretty basic example have also included here.