2016-03-16 6 views
5

1つのデータベースにテーブルを選択的に作成しようとしていますが、他のデータベースにテーブルを作成しようとしていません。Djangoで2つのデータベースのうち1つにのみテーブルを移行します

私の例では、transformsデータベースに、tlocationtcategoryというアプリ用のテーブルを作成したいだけです。しかし、Djangoはtransformsデータベースにすべてのテーブルを作成しています。ここで

はDBルータの設定です:

TRANSFORM_APPS = ('tcategory', 'tlocation') 


class TransformRouter(object): 
    """ 
    A router to control all database operations on models in the 
    "utils_transform" application. 
    """ 
    def db_for_read(self, model, **hints): 
     """ 
     Attempts to read 'transforms' models go to 'transforms' database. 
     """ 
     if model._meta.app_label in TRANSFORM_APPS: 
      return 'transforms' 
     return None 

    def db_for_write(self, model, **hints): 
     """ 
     Attempts to write 'transforms' models go to 'transforms' database. 
     """ 
     if model._meta.app_label in TRANSFORM_APPS: 
      return 'transforms' 
     return None 

    def allow_relation(self, obj1, obj2, **hints): 
     """ 
     Allow relations if a model in the 'tlocation' app is involved. 
     """ 
     if obj1._meta.app_label in TRANSFORM_APPS or \ 
      obj2._meta.app_label in TRANSFORM_APPS: 
      return True 
     return None 

    def allow_migrate(self, db, app_label, model=None, **hints): 
     """ 
     Make sure the 'tlocation' app only appears in the 'transforms' 
     database. 
     """ 
     if app_label in TRANSFORM_APPS: 
      return db == 'transforms' 
     return None 


class DefaultRouter(object): 
    """ 
    Catch-all Router for all other DB transactions that aren't in the 
    ``utils_transform`` app. 
    """ 

    def db_for_read(self, model, **hints): 
     return 'default' 

    def db_for_write(self, model, **hints): 
     return 'default' 

    def allow_relation(self, obj1, obj2, **hints): 
     if obj1._state.db == obj2._state.db: 
      return True 
     return None 

    def allow_migrate(self, db, app_label, model=None, **hints): 
     return None 

私はマイグレーションを実行するために使用していますコマンドは次のとおりです。

./manage.py migrate --database=transforms 

私は以下のように、一度に1アプリを移行し、この働くしかし、migrateコマンドでは、アプリケーションフィルタなしでは実行できません。例:

./manage.py migrate tlocation --database=transforms 
./manage.py migrate tcategory --database=transforms 
+0

実際にテーブルを作成していることを確認しましたか?いずれの場合も 'migrate'の出力は同じように見えるので、' 'False''を返すモデルに対しては何もしません。 –

+0

@KevinChristopherHenry、はい、テーブルを作成しています –

+0

@AaronLelevier DATABASE_ROUTERS設定のルータの順番は? –

答えて

2

テーブルを作成したくないモデルにmanaged = Falseを試しましたか?

class MyModel(models.Model): 
    ... 
    class Meta: 
     managed = False 
+0

これはまた、データベースを区別することもできません。どのDBにもテーブルを作成しないだけです。 –

関連する問題