Ja, es ist ein bisschen kompliziert.
Es gibt eine Reihe von Möglichkeiten, wie Sie es implementieren können. Grundsätzlich müssen Sie angeben, welche Modelle zu welcher Datenbank gehören.
Erste Option
Hier ist der Code, den ich verwende; ich hoffe es hilft.
from django.db import connections
class DBRouter(object):
"""A router to control all database operations on models in
the contrib.auth application"""
def db_for_read(self, model, **hints):
m = model.__module__.split('.')
try:
d = m[-1]
if d in connections:
return d
except IndexError:
pass
return None
def db_for_write(self, model, **hints):
m = model.__module__.split('.')
try:
d = m[-1]
if d in connections:
return d
except IndexError:
pass
return None
def allow_syncdb(self, db, model):
"Make sure syncdb doesn't run on anything but default"
if model._meta.app_label == 'myapp':
return False
elif db == 'default':
return True
return None
Die Art und Weise dies funktioniert, ist ich eine Datei mit dem Namen der Datenbank erstellen meine Modelle zu verwenden, das hält. In diesem Fall würden Sie eine separate models
-ähnliche Datei namens asterisk.py
erstellen, die sich im selben Ordner wie die Modelle für Ihre App befindet.
In Ihrer models.py
Datei, Sie
from asterisk import *
Dann fügen würden, wenn Sie tatsächlich einen Datensatz aus diesem Modell fordern, funktioniert es so etwas wie diese:
records = MyModel.object.all()
- Modul für
MyModel
ist myapp.asterisk
- gibt es eine Verbindung namens "asterisk" also verwenden Sie es anstelle von "default"
Zweite Option
Wenn Sie wollen die Kontrolle per-Modell der Datenbank Wahl haben, wie etwas, das funktionieren würde:
from django.db import connections
class DBRouter(object):
"""A router to control all database operations on models in
the contrib.auth application"""
def db_for_read(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def db_for_write(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def allow_syncdb(self, db, model):
if hasattr(model,'connection_name'):
return model.connection_name
return None
Dann für jedes Modell:
class MyModel(models.Model):
connection_name="asterisk"
#etc...
Beachten Sie, dass ich diese zweite Option nicht getestet habe.
Sorry für die verzögerte Antwort, aber das war immens hilfreich! – HurnsMobile
Hallo, ich habe Ihre zweite Option implementiert. Es funktioniert gut außer allow_syncdb. Ich werde eine Antwort unten mit einem funktionierenden allow_syncdb für zukünftige Sucher veröffentlichen. – Rich
Danke dafür! Ich hatte eine Zeitlang versucht, das von den Django-Doktoren zu finden. –