这是一个非常简单的django模式问题。我的经理代码通常存在于models.py中,但是当models.py非常庞大时会发生什么?是否有任何其他替代模式可让您的经理代码在models.py中生效,以实现可维护性并避免循环导入?
可能会问一个问题,为什么models.py是如此巨大,但让我们假设它的大小和实用性的广度是合理的。
答案 0 :(得分:26)
我更喜欢将models.py中的模型和managers.py中的管理器(forms.py中的表单)保存在同一个应用程序中。对于更通用的管理器,我更喜欢将它们保留在core.managers中,如果它们可以重用于其他应用程序。在我们的一些较大的应用程序中,models / modelname.py将包含一个管理器和模型代码似乎并不坏。
答案 1 :(得分:9)
使用大量模型最好的方法是使用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.
这是我在模型文件变得庞大时使用的结构,但是我尝试尽可能多地将内容分成更多可插拔的应用程序 - 所以我很少使用它。
希望这有帮助。
答案 2 :(得分:6)
我总是把我放在managers.py中。如果您有循环导入问题,请记住a)您可以在self.model中为经理引用模型类,并且b)您可以在函数内部进行导入。
答案 3 :(得分:3)
我在构建Django应用程序时所做的是创建一个[modelname] .py文件,只包含特定的模型代码,管理器代码,有时还有表单代码,并使用__init__.py文件导入模型目录中的所有文件。这有助于我保持它的可管理性。