是否可以在单独的文件中拆分Django模型和模型而不影响性能。
我搜索过Django文档,但找不到任何线索。
答案 0 :(得分:1)
你的问题更多地与Python的工作方式有关,而不是如何使用Django。因此,在我解释如何在Django中应用导入之前,您将在Python中使用它们。
Python具有极其灵活的模块化系统 - 或者能够将代码库分解为具有层次结构的许多文件。这在任何编程语言中都是必要的,因为将代码放在多个文件中有助于组织事物,当你有一群人在一个项目上工作时它肯定会有所帮助,但Python的工作方式非常简单和强大(如果你需要它)是)。
Python导入系统中最基本的组件是模块。任何Python文件(扩展名为.py
)都是Python模块。模块名称只是文件的名称,不包括扩展名。例如,hello.py
文件是hello
Python模块。现在模块/文件通常在它们内部定义了一些变量/函数/类。您可以使用import
语句轻松地在其他Python模块中导入它们。您在同一文件夹中有两个文件的图片 - foo.py
和bar.py
。以下是foo.py
:
# foo.py
hello = 'world'
def sum(a, b):
return a + b
然后,如果您需要使用foo.py
文件bar.py
中定义的内容,您可以这样做:
# bar.py
# the following import the whole foo module (foo.py file)
import foo
number = foo.sum(1, 2)
正如您在bar.py
中看到的那样,您可以导入整个foo
模块并使用其中定义的任何内容。然而,这通常不是导入东西的最佳方法。想象一下,在foo
模块中,您将定义10,000个变量,但您只需要使用其中一个变量。因此,如果您将导入整个模块,Python将必须导入所有变量,这显然会占用更多内存。要解决此问题,您可以使用from .. import ..
语句从其他对象中有选择地导入对象。 bar.py
中的以下示例仅从模块sum
导入foo
函数:
# bar.py
# import only the sum function from foo module
from foo import sum
number = foo.sum(1, 2)
因此从Python模块导入非常简单。现在将它放在您的Django上下文中,在您的应用程序中,您应该有两个文件 - models.py
和forms.py
。在models.py
内,您应该定义所有模型:
# models.py
from django.db import models
class FooModel(models.Model):
pass
models.py
导入models
的方式与我之前显示的方式不同。在这种情况下,Python实际上是从Python包中导入的,但我不会涉及到不使事情复杂化。只需将该导入声明视为理所当然。
现在您已定义模型,您可以在forms.py
:
# forms.py
# import django forms - take this statement for granted
from django import forms
# import the model
from models import FooModel
class FooModelForm(forms.ModelForm):
class Meta:
model = FooModel
就是这样。有关Python如何导入的更多信息,您可以阅读Dive Into Python一书here(它还有许多其他有用的信息......)。