Django多数据库-默认重复表

vom3gejh  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(81)

我有一个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中。
为什么会这样?

9njqaruj

9njqaruj1#

试试这个:

def allow_migrate(self, db, app_label, model_name=None, **hints):
    if app_label == 'subapp_name':
        return db == 'subapp_name'
    return None

字符串

相关问题