我必须将一个相对较大的应用程序移植到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
文件在单个应用程序中定义整个架构吗?
答案 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
从那里你应该能够做任何你需要的事情。