2017-07-06 68 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