我有一个Django应用程序与两个数据库.即使使用路由器,子应用程序表也会写入默认数据库。SubApp DB只有自己的表。
在core.models中,我没有定义appl_label。在子应用models.py中,我为每个类定义了app_label
子应用models.py
class MyModel ...
...
class Meta:
app_label = 'subapp_name'
db_table = 'my_model'
字符串
在默认设置中,我定义了路由:
DATABASE_ROUTERS = ["core.routers.DefaultRouter" , "subapp.routers.SubAppRouter"]
型
在allow_migrate的子应用路由器中,我有以下内容:
def allow_migrate(self, db, app_label, model_name = None, **hints):
if app_label == 'subapp_name' and db == 'subapp_name':
return True
return None
型
这个很好用。在SubApp数据库中,我只有MyModel表和DjangoMigration表(这个表包含所有的迁移行,甚至是默认模块中的迁移行)。
这是默认路由器中的allow_migrate:
def allow_migrate(self, db, app_label, model_name = None, **hints):
route_app_labels = { "admin", "auth", "contenttypes", "core", "sessions" }
if app_label in self.route_app_labels:
return db == "default"
return None
型
不幸的是,子应用程序MyModel也是在默认数据库中创建的,但子应用程序不在route_app_labels中。
为什么会这样?
1条答案
按热度按时间9njqaruj1#
试试这个:
字符串