1

我想使用 PassThroughManager

示例涵盖如何定义自定义管理器方法,但找不到有关如何更改默认查询集的信息,即。对象.all()。

如何指定使用 PassThroughManager 时我的 objects.all() 将返回什么?

- - 编辑 -

对于未来的读者,django 1.7 似乎内置了 PassThroughManager

https://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers-and-model-inheritance

4

3 回答 3

2

从 Django 3.0+ 开始,您不能再覆盖allQuerySet 中的函数。无需使用任何第三方的最新解决方案是:

from django.db import models

class CustomQuerySet(models.query.QuerySet):
    pass

class CustomManager(models.Manager):
    def get_queryset(self):
        qs = CustomQuerySet(self.model, using=self._db)
        return qs.filter(...)    # your custom logic here

class CustomModel(models.Model):
    objects = CustomManager()

关于自定义管理器和查询集的 Django 3.1 文档

于 2021-01-27T18:50:02.387 回答
1

你不能只覆盖all()你的自定义方法QuerySet吗?

class PostQuerySet(QuerySet):
    def all(self):
        ...
于 2013-11-06T13:53:04.580 回答
-1

请参阅@jproffitt 答案,但如果您确实需要在管理器中定义该方法

我想你可以这样做:

from django.db import models 
from django.db.models.query import QuerySet
from model_utils import managers


class MyManager(models.Manager):
    def all(self):
        # ... Your custom method

class MyQuerySet(QuerySet):
    pass

MyThThroughManager = managers.create_pass_through_manager_for_queryset_class(MyManager, MyQuerySet)

我看到了模型工具文档及其代码

于 2013-11-06T13:59:13.200 回答