首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用as_manager覆盖默认查询集

使用as_manager覆盖默认查询集
EN

Stack Overflow用户
提问于 2017-09-10 21:32:46
回答 3查看 2.3K关注 0票数 12

Django文档状态,我们可以使用manager的get_queryset方法覆盖默认的查询集。

如果我使用models.Queryset和as.manager方法来避免重复的方法,该怎么办?如何覆盖默认查询?

在这种情况下,get_queryset models.Queryset方法似乎不起作用。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-05 14:46:42

您可以使用ManagerQuerySet的组合来实现这一点,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
# model_managers.py
class CustomManager(models.Manager):
    """ Enables changing the default queryset function. """

    def get_queryset(self):
        # Here you can change the default queryset function
        return super(CustomManager, self).get_queryset(example_field=True)


class CustomQuerySet(models.QuerySet):
    """ Include additional queryset functions. """

    def example_filter(self):
        return self.filter(other_field=False)


# models.py
class YourModel(models.Model):

    # Override the default manager
    objects = CustomManager.from_queryset(CustomQuerySet)()  # The pair of empty parenthesis is required!

然后你可以在任何地方使用它,比如:

代码语言:javascript
代码运行次数:0
运行
复制
# Will filter `example_field`
YourModel.objects.all()
# Will filter `example_field` and `other_field`
YourModel.objects.example_filter()
票数 11
EN

Stack Overflow用户

发布于 2017-09-11 05:36:02

您可以通过继承models.Manager创建manage类,然后可以定义您自己的查询集方法。

在model.py中,我们应该将类赋值为属性,如下所示:

示例= ExampleManager()

现在,我们可以使用示例而不是对象,并可以调用相应的ExampleManager方法。

票数 0
EN

Stack Overflow用户

发布于 2017-09-11 07:16:38

你应该展示一下你尝试过的那些没用的东西。

但是,您只需要使用该调用在模型中定义您自己的经理:

代码语言:javascript
代码运行次数:0
运行
复制
class MyModel(models.Model):
    ...
    objects = MyQuerySet.as_manager()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46145771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档