Roteador de database do Django

Gostaria de rotear (alterar) o database com base no usuário autenticado. Eu olhei para os documentos, mas não sei como fazer isso no login do usuário …

Eu estava pensando em adicionar um campo com database_name ao meu UserProfile personalizado e, em seguida, gostaria de passar essa informação para o roteador de database que faria a troca …

Eu não tenho nenhum código para mostrar porque simplesmente não sei como implementar isso.

Este post de alguma forma se relaciona com o meu post anterior.

Então o esquema seria como:

 - Users (containing only the `UserProfile`) - user1 (containing the app database) - user2 (containing the app database) - ... 

Você poderia me apontar na direção certa?

Obrigado! BR

Multitenancy em geral é um pouco difícil de fazer sem torcer o django um pouco, mesmo sendo uma requisição típica em aplicações SaaS. Aqui está um link descrevendo uma abordagem , a desenvolvida em uma empresa com a qual trabalhei era um pouco diferente, hackeando os sites contrib.sites, mas a parte do database é bem parecida.

Em suma, se você quiser multitenancy do database, você terá que hackear o Django ConnectionHandler para fazer o que quiser.

Consulte este post sobre como brincar com os roteadores

 DATABASE_ROUTERS = ['CustomDatabaseRouter',] #a setting that Django understands. class CustomDatabaseRouter(object): def db_for_read(self, model, **hints): site_name = get_current_site() if site_name in ['site1']: return 'db1' if site_name in ['site2']: return 'db2' return 'default' def db_for_write(self, model, **hints): site_name = get_current_site() if site_name in ['site1']: return 'db1' if site_name in ['site2']: return 'db2' return 'default' def allow_syncdb(self, model, **hints): site_name = get_current_site() if site_name in ['site1'] and db == 'db1': return True if site_name in ['site2'] and db == 'db2': return True return False