0

如果可能的话,我希望能够通过 args 或 kwargs objects,并且没有不必要的并发症。它看起来像Model.objects('something').all()or Model.objects('something').order_by('field')。我尝试__init__为 AManager 进行自定义,但无法让它工作,所以它可能就像编写适当的__init__函数一样简单。

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

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')以某种方式影响 QuerySet。我想要做的是避免像A.objects.custom_filter('name').another_filter('name')我必须为每个链式过滤器包含重复的 arg 这样的事情。

4

1 回答 1

1

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

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

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

于 2013-10-29T18:42:26.720 回答