25

这是一个非常简单的 django 模式问题。我的管理器代码通常存在于 models.py 中,但是当 models.py 真的很大时会发生什么?是否有任何其他替代模式可以让您的管理器代码存在于 models.py 中以实现可维护性并避免循环导入?

可能会问一个问题,为什么 models.py 如此庞大,但让我们假设它的大小和实用性广度是合理的。

4

4 回答 4

32

我更喜欢将模型保存在 models.py 中,将管理器保存在 manager.py 中(forms.py 中的表单)都在同一个应用程序中。对于更通用的管理器,我更喜欢将它们保留在 core.managers 中,如果它们可以重新用于其他应用程序。在我们的一些较大的应用程序中,models/modelname.py 将包含一个管理器和看起来不错的模型代码。

于 2009-12-10T19:43:06.927 回答
11

使用大量模型的最佳选择是使用 django 模块来发挥自己的优势,并简单地创建一个名为 models 的文件夹。将您的旧 models.py 移动到此模型文件夹中,并将其重命名为__init__.py. 这将允许您在此模型文件夹中将每个模型分成更具体的文件。

然后,您只需将每个模型导入到您__init__.py的命名空间中。

因此,例如,您可能希望将其分为:

yourapp/
    models/
        __init__.py # This file should import anything from your other files in this directory
        basic.py # Just an example name
        morespecificmodels.py # Just an example name
        managers.py # Might want to separate your manager into this

那么你__init__.py可以是:

from basic import * # You should replace * with each models name, most likely.
from managers import YourManager # Whatever your manager is called.

这是我在模型文件变大时使用的结构,但是我尝试尽可能多地将事物分成更多可插入的应用程序 - 所以我很少使用这种结构。

希望这可以帮助。

于 2009-12-10T20:07:18.883 回答
9

我总是把我的放在managers.py中。如果您遇到循环导入问题,请记住 a) 您可以在 self.model 中引用管理器的模型类,并且 b) 您可以在函数内部进行导入。

于 2009-12-10T19:51:03.157 回答
4

我在构建 Django 应用程序时所做的是创建一个 [modelname].py 文件,其中仅包含特定的模型代码、管理器代码,有时还有表单代码,然后使用 __init__.py 文件将所有内容导入模型目录中。这至少帮助我保持了可管理性。

于 2009-12-10T19:24:17.270 回答