我有大量的Django应用程序和大量的子应用程序。目前,我正在一个子应用程序中重做模型,所以我得到了一个。。。问题。 我有大量分离的丑陋函数来处理模型。基本上是这样的:
def get_some_things(...):
def postprocess(...):
pass
def preprocess(...):
pass
preprocess(...)
x = MyModel.objects.....get(1)
return postprocess(x, ...)
我有很多像这样的功能!而且它在当前代码中的使用很难看(比如DatabaseAccessor.get_db().django_kitty().get_some_things(...)
)。所以,我的想法是让开发人员能够像这样使用这些函数:
或者像这样:
MyModel.objects.get_some_things(...)
但是!我有很多函数,所以我不能在里面写模型.py. 所以,我没有什么想法:
__getattr__
并动态加载诸如functions_common.py
、functions_things.py
等模块,将收集到的函数存储到字典中并调用所需的?在
我对模型函数和模型管理器使用的指导原则是:只要目标是作用于单个模型对象,我就定期在模型上使用方法函数。然而,如果我的用例要求我处理模型的多个对象,并且满足我的干性动机,我会使用模型管理器来实现这一点。在
如果您的模型需要很多独特的方法,那么拥有庞大的模型定义就是您要付出的代价。如果出于某种原因,您确实希望将功能拆分为其他文件(或者,对于某些实际有用的文件,共享公共功能),您可以使用mixin方法:
关于您自己的建议:
1-如果您希望每个模型有单独的文件,可以使用以下方法:
^{pr2}$请注意,您需要为每个型号显式设置app_标签:
2-管理器方法的返回值类型无关。管理器和模型的区别在于分别分离表和行级功能。在
3-听起来像是不必要的魔法,覆盖
Model.__getattr__
是一项痛苦的任务。在听起来像是第二种选择。在
model manager method not returning a QuerySet没有问题。在
相关问题 更多 >
编程相关推荐