Django obsługuje wiele baz danych więc wszystko, czego potrzebujesz, to trochę kodu do obsługi przełączania między nimi.
Jeśli przeczytałeś dokumentację, zobaczysz, że Django pozwala na dostarczenie własnej niestandardowej klasy 'router', która decyduje, której bazy danych użyć dla danego zapytania:
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# za pomocą routerów
Ponieważ mówisz, że chcesz wybrać bazę danych „na interfejsie”, prawdopodobnie każdy użytkownik Twojej witryny może wybrać inny backend bazy danych. Stanowi to problem, ponieważ router db nie wie nic o bieżącym żądaniu http i użytkowniku.
Proponuję użyć tego oprogramowania pośredniczącego „ThreadLocal” do przechowywania bieżącego obiektu żądania, aby można było uzyskać do niego dostęp z niestandardowego routera:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py
Załóżmy, że zapisujesz wybrany przez użytkownika backend w sesji jako request.session['db_name']
- Twój router wyglądałby mniej więcej tak:
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