You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在不同Azure VM的两个Django项目如何跨项目导入model

导入跨Django项目Model的可行方案

以下方案按需选择即可:

方案1:抽离公共Model为独立包(长期维护首选)

如果只是复用Model的字段定义、不需要直接读写对方项目的真实数据,选这个方案最稳妥:

  • 把两个项目共用的Model、相关常量、通用工具方法抽离成一个独立的Python包
  • 两个项目分别用pip install安装这个公共包,直接导入包里的Model使用即可
  • 注意如果需要同步表结构,迁移文件也可以放到公共包中,两边项目执行migrate时统一用公共包的迁移规则即可,避免两边表结构不一致

方案2:跨库直接访问Project1的真实数据

如果Project2需要读写Project1数据库里的实际数据,可按以下步骤操作:

  • 先打通网络权限:在Azure网络安全组中开放Project1 VM的5432端口,允许Project2 VM的IP访问,同时修改Project1 Postgres的pg_hba.conf配置,放行Project2的连接请求
  • 在Project2的settings.py中配置多数据库:
DATABASES = {
    'default': {
        # Project2原有数据库配置
    },
    'project1_db': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'Project1的数据库名',
        'USER': 'Project1数据库用户名',
        'PASSWORD': 'Project1数据库密码',
        'HOST': 'Project1 VM的公网/内网IP',
        'PORT': '5432',
    }
}
  • 把Project1的Model代码复制到Project2对应App下,给Model新增Meta配置:
class Project1SampleModel(models.Model):
    # 字段定义和Project1中完全一致
    name = models.CharField(max_length=100)
    # 其余字段...

    class Meta:
        managed = False # 禁止Django对该表执行迁移操作,避免误改Project1的表
        db_table = 'Project1中对应的实际表名' # Django默认表名规则为<App名>_<Model名>,需和实际表名完全匹配
        app_label = 'Project2中存放该Model的App名称'
  • 操作数据时手动指定数据库即可,示例:
    project1_data = Project1SampleModel.objects.using('project1_db').filter(name="test").first()

方案3:自动生成Model代码(适合Model多不想手动复制的场景)

如果Project1的Model数量多,手动复制容易出错,只要两个数据库连通,在Project2环境下执行以下命令即可自动生成对应Model:
python manage.py inspectdb --database=project1_db > project1_models.py
生成的代码默认自带managed = False配置,直接导入使用即可。

注意:如果两个项目的公共Model后续会频繁迭代,优先选方案1,避免两边Model定义不一致出现兼容性问题;如果只是临时需要读写对方项目的表,选方案2/3开发效率更高。

内容的提问来源于stack exchange,提问作者gjivanya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:39:02