0

是否可以在不影响性能的情况下将 Django 模型和模型表单拆分到单独的文件中。

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

4

1 回答 1

2

您的问题更多地与 Python 的工作原理有关,而不是与如何使用 Django 相关。所以在我解释如何在 Django 中应用导入之前,这里是你如何在 Python 中执行它们。

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

Python导入系统中最基本的组件是模块。任何 Python 文件(带.py扩展名)都是 Python 模块。模块名称只是不包括扩展名的文件名。例如hello.py文件是一个helloPython 模块。现在模块/文件通常在其中定义了一些变量/函数/类。import您可以使用语句轻松地将它们导入其他 Python 模块中。图像您在同一文件夹中有两个文件 -foo.pybar.py. 以下是 的内容foo.py

# foo.py

hello = 'world'

def sum(a, b):
    return a + b

然后,如果您需要使用文件中定义的任何内容,foo.pybar.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 书(它还有很多其他有用的信息......)。

于 2013-04-10T16:15:41.927 回答