这是一个非常简单的 django 模式问题。我的管理器代码通常存在于 models.py 中,但是当 models.py 真的很大时会发生什么?是否有任何其他替代模式可以让您的管理器代码存在于 models.py 中以实现可维护性并避免循环导入?
可能会问一个问题,为什么 models.py 如此庞大,但让我们假设它的大小和实用性广度是合理的。
这是一个非常简单的 django 模式问题。我的管理器代码通常存在于 models.py 中,但是当 models.py 真的很大时会发生什么?是否有任何其他替代模式可以让您的管理器代码存在于 models.py 中以实现可维护性并避免循环导入?
可能会问一个问题,为什么 models.py 如此庞大,但让我们假设它的大小和实用性广度是合理的。
我更喜欢将模型保存在 models.py 中,将管理器保存在 manager.py 中(forms.py 中的表单)都在同一个应用程序中。对于更通用的管理器,我更喜欢将它们保留在 core.managers 中,如果它们可以重新用于其他应用程序。在我们的一些较大的应用程序中,models/modelname.py 将包含一个管理器和看起来不错的模型代码。
使用大量模型的最佳选择是使用 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.
这是我在模型文件变大时使用的结构,但是我尝试尽可能多地将事物分成更多可插入的应用程序 - 所以我很少使用这种结构。
希望这可以帮助。
我总是把我的放在managers.py中。如果您遇到循环导入问题,请记住 a) 您可以在 self.model 中引用管理器的模型类,并且 b) 您可以在函数内部进行导入。
我在构建 Django 应用程序时所做的是创建一个 [modelname].py 文件,其中仅包含特定的模型代码、管理器代码,有时还有表单代码,然后使用 __init__.py 文件将所有内容导入模型目录中。这至少帮助我保持了可管理性。