【问题标题】:Django - import model from another projectDjango - 从另一个项目导入模型
【发布时间】:2016-10-24 00:06:54
【问题描述】:

我从来没有做过这样的事情,所以我不确定解决这个问题的最佳方法是什么:

我有两个 Django 项目:

root/
    project1/
            manage.py
            project1/
                    models.py
                    urls.py
                    ...
    project2/
            manage.py
            project2/
                    models.py
                    urls.py
                    ...

这些项目使用相同的数据库,它们每个都有大约 10 个模型(数据库表),并且一些模型重叠:Project1 需要 Project2 模型之一的 ForeignKey,但 Project2 需要 Project1 模型之一的 ForeignKey:

项目1:

class Area_model(models.Model):
    name = models.CharField(max_length=25)
    url = models.CharField(max_length=25)

class Question_model(models.Model):
    text = models.TextField(max_length=1000)
    date = models.CharField(max_length=40)
    answer = models.SmallIntegerField()
    ...
    employee = models.ForeignKey(Employee_model)

项目2:

class Employee_model(models.Model):
    name = models.CharField(max_length=15)
    adress = models.CharField(max_length=15)
    area = models.ForeignKey(Area_model)

我尝试将 project1.models 导入到 project2 的 models.py 中,但它显示“未知模块”。我需要将 project1 导入 project2 并反向,这会是一个问题吗? (循环引用?) 如果是这样,我该如何以其他方式完成此操作?

【问题讨论】:

  • 为什么要分到不同的项目?为什么不直接制作这两个可重复使用的应用程序?
  • 可重复使用的应用程序,我喜欢这样。应用程序应该打包在 python 包中并且可以安装,可以使用pip,或者运行python setup.py install。
  • 这里是github.com/slackmart/tastypie-sepomex 的一个例子,探索setup.py。
  • 这些项目是两个完全不同的网站,在不同的域下。 (它们有单独的模板、样式表、urls.py、views.py 等)。我之前从来没有做过可复用的应用,所以不知道在这种情况下是否可以使用它?
  • 看起来像微服务?

标签: django model


【解决方案1】:

在你的 WSGI.py 中,通过sys.path.append('/root') 将你的第二个项目的路径添加到 sys.path。

在第一个项目的 settings.py 中,将 'project2.app2' 添加到 INSTALLED_APPS 列表中:

INSTALLED_APPS = [
    ...
    'app1',
    'project2.app2',
    ...
]

然后您应该可以使用from project2.project2.models import *轻松导入您的第二个项目的模型

至少对我来说是这样的。

【讨论】:

    【解决方案2】:

    尝试将另一个项目的路径添加到您的 PYTHONPATH 中,然后将第一个项目的应用程序添加到第二个项目的 settings.py 安装的应用程序中。 不要忘记先导入应用程序,您必须在第二个应用程序的 models.py 中导入第一个应用程序的模型。我不确定它是否会起作用,因为我没有测试过,但你可以试一试。

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2018-05-03
      相关资源
      最近更新 更多