在单独的文件中拆分Django模型和模型

时间:2013-04-10 04:44:18

标签: python django django-models django-forms

是否可以在单独的文件中拆分Django模型和模型而不影响性能。

我搜索过Django文档,但找不到任何线索。

1 个答案:

答案 0 :(得分:1)

你的问题更多地与Python的工作方式有关,而不是如何使用Django。因此,在我解释如何在Django中应用导入之前,您将在Python中使用它们。

Python具有极其灵活的模块化系统 - 或者能够将代码库分解为具有层次结构的许多文件。这在任何编程语言中都是必要的,因为将代码放在多个文件中有助于组织事物,当你有一群人在一个项目上工作时它肯定会有所帮助,但Python的工作方式非常简单和强大(如果你需要它)是)。

Python导入系统中最基本的组件是模块。任何Python文件(扩展名为.py)都是Python模块。模块名称只是文件的名称,不包括扩展名。例如,hello.py文件是hello Python模块。现在模块/文件通常在它们内部定义了一些变量/函数/类。您可以使用import语句轻松地在其他Python模块中导入它们。您在同一文件夹中有两个文件的图片 - foo.pybar.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.pyforms.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(它还有许多其他有用的信息......)。