Django - 从另一个项目导入模型

时间:2016-06-22 07:33:36

标签: django model

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

我有两个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:

PROJECT1:

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)

Project2的:

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并反向,这是一个问题吗? (循环参考?) 如果是这样,我怎么能以其他方式实现这一目标?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在WSGI.py中,通过Server = net.createServer({ allowHalfOpen : true }) .on('connection', (NetSocket) => { NetSocket .on('data', (data) => { var RemoteClient = NetSocket.remoteAddress + ':' + NetSocket.remotePort; console.log('message from ' + RemoteClient + ' // ' + data.toString() } }) 将第二个项目的路径添加到sys.path中。

在第一个项目的settings.py中,将sys.path.append('/root')添加到'project2.app2'列表中:

INSTALLED_APPS

然后,您应该可以使用INSTALLED_APPS = [ ... 'app1', 'project2.app2', ... ]

轻松导入第二个项目的模型。

至少这对我有用。