2017-07-06 66 views
0

我的项目中有2个数据库,包含多个应用程序。所有的应用程序除了一个使用默认数据库,另一个有一个单独的数据库。在运行makemigrations和./manage.py migrate --database = separate_db_name后,我仍然有未应用的默认数据库迁移挂起。使用Django中的多个数据库执行迁移

问题是我怎样才能使这个迁移只对我的单独的应用程序可见,而不是其他人(使用默认数据库)。由于

这里是我的路由器

class S3DatabaseRouter(object): 
""" 
Determine how to route calls for s3web_upload_dev database 
""" 

def db_for_read(self, model, **hints): 
    """ 
    Attempts to read s3web_upload models to go to s3web_upload_dev 
    """ 
    if model._meta.app_label == 's3web_upload': 
     return 's3web_upload_dev' 
    return None 

def db_for_write(self, model, **hints): 
    """ 
    Attempts to write s3web_upload models to go to s3web_upload_dev 
    """ 
    if model._meta.app_label == 's3web_upload': 
     return 's3web_upload_dev' 
    return None 

def allow_migrate(self, db, app_label, model_name=None, **hints): 
    """ 
    Make sure the s3web_upload app only appears in the 's3web_upload_dev' database 
    """ 
    if app_label == 's3web_upload': 
     return db == 's3web_upload_dev' 
    return None 

回答

0

对于使用默认的数据库也需要在路由器类路由,试试下面的代码它应该工作的应用程序。

class S3DatabaseRouter(object): 
    """ 
Determine how to route calls for s3web_upload_dev database 
""" 
def db_for_read(self, model, **hints): 
    """ 
    Attempts to read s3web_upload models to go to s3web_upload_dev 
    """ 
    if model._meta.app_label == 's3web_upload': 
     return 's3web_upload_dev' 
    if app_label == 'default': # if you using custome applable use it instead of 'default' 
     return 'default' # it should be the db name from settings file 
    return None 

def db_for_write(self, model, **hints): 
    """ 
    Attempts to write s3web_upload models to go to s3web_upload_dev 
    """ 
    if model._meta.app_label == 's3web_upload': 
     return 's3web_upload_dev' 
    if app_label == 'default': 
     return 'default' 
    return None 

def allow_migrate(self, db, app_label, model_name=None, **hints): 
    """ 
    Make sure the s3web_upload app only appears in the 's3web_upload_dev' database 
    """ 
    if app_label == 's3web_upload': 
     return db == 's3web_upload_dev' 

    if app_label == 'default': 
     return db == 'default' 
    return None