Django podporuje více databází takže vše, co potřebujete, je nějaký kód, který zvládne přepínání mezi nimi.
Pokud jste si přečetli dokumenty, uvidíte, že Django vám umožňuje zadat svou vlastní třídu „router“, která rozhoduje, kterou databázi použít pro daný dotaz:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# using-routers
Protože říkáte, že chcete vybrat, kterou db „na frontendu“, pak by si pravděpodobně každý uživatel vašeho webu mohl vybrat jiný databázový backend. To představuje problém, protože db router neví nic o aktuálním http požadavku a uživateli.
Navrhuji, abyste použili tento middleware 'ThreadLocal' k uložení aktuálního objektu požadavku, abyste k němu měli přístup ze svého vlastního routeru:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py
Řekněme, že uložíte uživatelem zvolený backend v relaci jako request.session['db_name']
- váš router by vypadal nějak takto:
from django_tools.middlewares import ThreadLocal
class RequestRouter(object):
def db_for_read(self, model, **hints):
request = ThreadLocal.get_current_request()
return request.session.get('db_name', 'default')
def db_for_write(self, model, **hints):
request = ThreadLocal.get_current_request()
return request.session.get('db_name', 'default')
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_syncdb(self, db, model):
return True