django 迁移 - 从磁盘上的位置获取迁移

Posted

技术标签:

【中文标题】django 迁移 - 从磁盘上的位置获取迁移【英文标题】:django migrations - get migrations from location on disk 【发布时间】:2017-06-10 12:59:00 【问题描述】:

我有一个 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迁移模块在磁盘上的位置而不是模块名?

【问题讨论】:

【参考方案1】:

不,没有办法只为 Django 提供迁移模块的路径。迁移是实际的 Python 模块,因此它们必须可以从您的 PYTHONPATH 中的某个位置导入。

您当然可以更改您的PYTHONPATH,以便可以在 Python 中导入磁盘上的位置。

【讨论】:

以上是关于django 迁移 - 从磁盘上的位置获取迁移的主要内容,如果未能解决你的问题,请参考以下文章

从 db 获取当前的 db 迁移状态,而不是 django 中的模型

Django 从 2.0 迁移到 2.2(查看权限问题)

Django 1.8 迁移:有啥方法可以从不再有模型的数据库表中获取数据?

具有默认值的外键上的 Django 1.7 迁移错误

在迁移中获取模型 ContentType - Django 1.7

如何将现有的 20.04 ext4 安装迁移到不同磁盘上的 zfs root?