Django自定义model.Manager,使其接受参数

Django自定义model.Manager,使其接受参数,django,django-models,Django,Django Models,如果可能的话,我希望能够通过对象传递args或kwargs,并且不会出现不必要的复杂情况。它看起来像Model.objects('something').all()或Model.objects('something')。order_by('field')。我试图为AManager自定义\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,但无法使其工作,因此它可

如果可能的话,我希望能够通过
对象传递args或kwargs,并且不会出现不必要的复杂情况。它看起来像
Model.objects('something').all()
Model.objects('something')。order_by('field')
。我试图为AManager自定义
\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,但无法使其工作,因此它可能只需编写适当的

我所做的是向自定义管理器添加一个方法,如下所示:

class AManager(models.Manager):
    def example(self, arg):
        self.example = arg
        return self

class A(models.Model):
    name = models.Charfield()

    objects = AManager()

在本例中,
A.objects.example('name').all()
将返回通常的
A.objects.all()
,当然,除非
example('name')
以某种方式影响查询集。我想做的是避免像
A.objects.custom\u filter('name')。另一个\u filter('name')
,其中我必须为每个链式过滤器包含一个重复的参数。

您需要向您的管理器添加一个
\u call\u
方法,该方法接受此参数并返回与默认管理器不同的查询集(或基于该论点的另一位经理)

最好编写自定义查询集方法并返回它们。QuerySet设计为链接的,因此不必继续传递相同的参数


如果您添加特定的用例,我可以向您展示如何使用自定义管理器和/或QuerySet类来构造它。

我的一些查询调用的模型属性对获取和计算都很昂贵。它们发生在调用自定义QuerySet方法时。我现在保存计算值(作为DataList实例)。我想调用保存的值(如果它们存在)或QuerySet,传递一些初始值会更容易。然后,我可以针对QuerySet和DataList链接相同的方法,这样查询就清晰易读。但是在后台,当Django查询太贵时,操作会切换为针对Python类的方法。那么我如何定制
\uu call\uu
方法呢?如果没有更多具体的代码示例,我很难为您提供如何构建通过链接保留状态的自定义查询集的指导。请查看Django Model Utils,它有一个PassthroughManager,可以使用自定义查询集方法解决链接问题:我实际上使用的是
PassThroughManager
频繁:)然后我建议扩展
PassThroughManager
,根据
\uu call\uu
方法中传递的参数返回不同的QuerySet类
def\uu call\uu(self,*args,**kwargs)
只允许像函数一样调用类,因此让该函数根据参数配置管理器以返回不同的QuerySet类。谢谢。我想我已经找到了一种方法来管理这项任务,也许还有更广泛的任务。我提出了另一个stackoverflow问题,以检查我是否在正确的路径上: