我在django项目中使用了两个数据库。要处理我有一个路由器文件:
class SecondDB:
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
if model._meta.app_label == 'app_in_second_db':
return 'second_db'
else:
return 'default'
def db_for_write(self, model, **hints):
if model._meta.app_label == 'app_in_second_db':
return 'app_in_second_db'
else:
return 'default'
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'app_in_second_db' or \
obj2._meta.app_label == 'auditlog':
return True
else:
return False
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'app_in_second_db':
return db == 'second_db'
else:
return db == 'default'
问题是如果我运行
$./manage.py migrate --database second_db
项目中的所有应用程序都迁移到第二个数据库。 我可以迁移特定的应用
./manage.py migrate app_in_second_db 0001_initial --database second_db
但是想知道我的路由器文件中是否存在错误,以及如何防止意外将所有模型移动到second_db数据库。
谢谢
答案 0 :(得分:1)
来自官方文档:
makemigrations 始终会为模型更改创建迁移,但如果 allow_migrate()返回 False ,则会执行任何迁移操作 在db ...
上运行迁移时,将以静默方式跳过 model_name
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'app_in_second_db':
return db == 'second_db'
# this will prevent other apps to create their tables in 'second_db'
if db == 'second_db':
return False
return None