You need to enable JavaScript to run this app. Django两个项目共用PostgreSQL数据库如何跨项目导入已有模型
优惠活动
大模型
产品
解决方案
定价
更多

Django两个项目共用PostgreSQL数据库如何跨项目导入已有模型

可行实现方案汇总

以下三种方案均可以满足需求,可根据你的实际场景选择:

方案1:将公共模型封装为独立可复用包(最推荐生产环境使用)

这是长期维护成本最低的方案,步骤如下:

  • 把proj1中存放模型的Django app抽离为独立的Python包,基础结构参考:
    django-shared-models/
    ├── shared_models/
    │   ├── __init__.py
    │   ├── models.py  # 存放原proj1的所有公共模型
    │   └── apps.py
    └── setup.py
    
  • 分别在proj1、proj2的虚拟环境中安装该独立包
  • 两个项目的INSTALLED_APPS配置项都添加shared_models,DATABASES配置指向同一个PostgreSQL实例即可
  • 所有数据库迁移操作仅在proj1侧执行,proj2不需要执行迁移,避免迁移文件冲突

方案2:本地直接导入proj1的app代码(适合开发调试场景)

如果两个项目都运行在同一台机器上,可以不用打包直接导入:

  • 在proj2的settings.py头部添加代码,把proj1的根路径加入Python导包路径:
    import sys
    sys.path.insert(0, "/absolute/path/to/proj1") # 替换为proj1的实际根路径
    
  • 在proj2的INSTALLED_APPS中添加proj1存放模型的app,比如proj1.core_app
  • proj2的DATABASES配置和proj1完全一致即可,同样仅在proj1侧执行迁移操作,不要在proj2运行makemigrations、migrate命令

方案3:proj2侧定义非托管映射模型(适合只读/临时使用场景)

如果proj2仅需要读取数据库数据,不需要修改表结构,可以直接在proj2内定义和proj1结构完全一致的模型,不需要依赖proj1代码:

from django.db import models

# 字段定义和proj1中的对应模型完全一致
class Order(models.Model):
    order_no = models.CharField(max_length=32, unique=True)
    amount = models.IntegerField()
    create_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        managed = False # 告知Django不管理该表的结构、迁移
        db_table = "core_app_order" # 替换为proj1中该模型对应的实际数据库表名
  • 该方案的缺陷是proj1修改模型字段后,需要手动同步修改proj2中的模型定义,否则会出现字段不匹配的问题

通用注意事项

  • 两个项目的Django大版本尽量保持一致,避免ORM语法、字段属性定义不兼容
  • 所有表结构变更、写入操作尽量统一在proj1侧执行,proj2如果需要写入数据优先调用proj1提供的接口,避免并发写入冲突
  • 如果proj2不需要写数据,建议给proj2的数据库账号分配只读权限,降低误操作风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:36:04