是否可以引用另一个应用程序中定义的模型?

时间:2015-03-06 15:42:06

标签: django

我必须将一个相对较大的应用程序移植到Django。该申请由许多彼此无关的组成部分组成;但都涉及一个名为 Location 的公共模型(即表格)。

由于每个组件本身都是由许多模型组成的,因此将它们中的每一个封装在自己的Django应用程序中似乎更为明智。但是,他们都必须以某种方式引用 Location 模型。我正在考虑一个文件夹结构,如:

/site
 /main
   models.py (contains Location class)
 /componentA
   models.py (references Location class with ForeignKey)
 /componentB
   models.py (references Location class with ForeignKey)

这可能吗?是否有更好的策略来封装这些应用程序组件?或者我必须使用单个models.py文件在单个应用程序中定义整个架构吗?

3 个答案:

答案 0 :(得分:3)

您的所有django应用程序都被视为python模块,因此您可以通过以下导入设置模型关系:

在main / models.py中:

from django.db import models

class Location(models.Model):
    # etc...

在componentA / models.py或componentB / models.py中:

from django.db import models
from main.models import Location

class AnotherModel(models.Model):
    location = models.ForeignKey(Location)
    #etc...

或者,根据docs,您可以避免在声明时导入它,这可能是可取的,这取决于项目的大小和其他依赖项的数量,通过编写依赖模型如下: / p>

from django.db import models

class AnotherModel(models.Model):
    location = models.ForeignKey('main.Location')
    #etc...

最好在项目结构中将不同的问题分开,以便不同的应用程序执行不同的操作 - 因此,如果您能够将不同的组件分开,那通常是更好的设计并有助于保持代码模块化。

答案 1 :(得分:1)

您可以使用其他应用中的模型,例如:

from componentB.models import ClassComponentB

其中ClassComponentB将是componentB / models.py

中的某个类

答案 2 :(得分:1)

您应该能够从该位置进行导入,例如:

from componentA.models import model

从那里你应该能够做任何你需要的事情。

相关问题