Sto provando a creare tabelle in modo selettivo in 1 database, ma non nell'altro.Migrazione delle tabelle solo a 1 database su 2 in Django
Nel mio esempio, desidero solo creare tabelle per le app: tlocation
e tcategory
nel database transforms
. Tuttavia, Django sta creando tutte le tabelle nel database transforms
.
Ecco la configurazione del router DB:
TRANSFORM_APPS = ('tcategory', 'tlocation')
class TransformRouter(object):
"""
A router to control all database operations on models in the
"utils_transform" application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read 'transforms' models go to 'transforms' database.
"""
if model._meta.app_label in TRANSFORM_APPS:
return 'transforms'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write 'transforms' models go to 'transforms' database.
"""
if model._meta.app_label in TRANSFORM_APPS:
return 'transforms'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the 'tlocation' app is involved.
"""
if obj1._meta.app_label in TRANSFORM_APPS or \
obj2._meta.app_label in TRANSFORM_APPS:
return True
return None
def allow_migrate(self, db, app_label, model=None, **hints):
"""
Make sure the 'tlocation' app only appears in the 'transforms'
database.
"""
if app_label in TRANSFORM_APPS:
return db == 'transforms'
return None
class DefaultRouter(object):
"""
Catch-all Router for all other DB transactions that aren't in the
``utils_transform`` app.
"""
def db_for_read(self, model, **hints):
return 'default'
def db_for_write(self, model, **hints):
return 'default'
def allow_relation(self, obj1, obj2, **hints):
if obj1._state.db == obj2._state.db:
return True
return None
def allow_migrate(self, db, app_label, model=None, **hints):
return None
Il comando che sto usando per eseguire le migrazioni è:
./manage.py migrate --database=transforms
Quando migrano 1 app in un momento solo, come sotto, questo lavori. Ma non posso eseguire senza un filtro app nel comando migrate
. Esempio:
./manage.py migrate tlocation --database=transforms
./manage.py migrate tcategory --database=transforms
Hai confermato che sta effettivamente creando i tavoli? Poiché l'output di 'migrate' è uguale in entrambi i casi," silenziosamente non eseguirà alcuna operazione su un modello per il quale questo restituisce 'False'". –
@KevinChristopherHenry, sì, sta creando tabelle –
@AaronLelevier Qual è l'ordine dei router nell'impostazione DATABASE_ROUTERS? –