覆盖在django-model-utils中使用PassThroughManager时返回的objects.all()是什么?

时间:2013-11-06 13:28:33

标签: django model

我想用 PassThroughManager

示例介绍了如何定义自定义管理器方法,但无法找到有关如何更改默认查询集的信息,即。 objects.all()。

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

---编辑 -

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

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

3 个答案:

答案 0 :(得分:2)

您是否只能覆盖自定义all()上的QuerySet方法?

class PostQuerySet(QuerySet):
    def all(self):
        ...

答案 1 :(得分:1)

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

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 Documentation on custom manager & queryset

答案 2 :(得分:0)

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

我想你可以做到:

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

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

class MyQuerySet(QuerySet):
  pass

MyThThroughManager  = managers.create_pass_through_manager_for_queryset_class(MyManager, MyQuerySet)

我看到了model utils docsits code