2017-01-25 10 views
0

私はdjangoプロジェクトを持っていますが、私は別の場所(プロジェクト自体ではない)からマイグレーションを取得したいと思います。私は設定ページでMIGRATION_MODULESを使用しようとしましたが、私はそれをプロジェクトモジュールの中で異なるものにすることしかできませんでした。このようなことはできるが、アプリケーションごとの移行ファイルへのパスが必要になりたい。 私はジャンゴ移行メカニズムに掘っおよび移行をロードし、このコードが見つかりました:私は私のモジュールを取得djangoのマイグレーション - ディスク上の場所からマイグレーションを取得する

# part of loader.py from django.db.migrations 
@classmethod 
def migrations_module(cls, app_label): 
    if app_label in settings.MIGRATION_MODULES: 
     return settings.MIGRATION_MODULES[app_label] 
    else: 
     app_package_name = apps.get_app_config(app_label).name 
     return '%s.%s' % (app_package_name, MIGRATIONS_MODULE_NAME) 

def load_disk(self): 
    """ 
    Loads the migrations from all INSTALLED_APPS from disk. 
    """ 
    self.disk_migrations = {} 
    self.unmigrated_apps = set() 
    self.migrated_apps = set() 
    for app_config in apps.get_app_configs(): 
     # Get the migrations module directory 
     module_name = self.migrations_module(app_config.label) 
     was_loaded = module_name in sys.modules 
     try: 
      module = import_module(module_name) 
     except ImportError as e: 

- それはimport_moduleラインで失敗を。 djangoに、モジュール名の代わりにディスク上の移行モジュールの場所を伝える方法はありますか?

答えて

0

いいえ、Djangoに移行モジュールへのパスを与える方法はありません。マイグレーションは実際のPythonモジュールなので、PYTHONPATHのある場所からインポート可能でなければなりません。

もちろん、PYTHONPATHを変更して、ディスク上の場所をPythonでインポートできるようにすることもできます。

関連する問題