我想用 PassThroughManager。
示例介绍了如何定义自定义管理器方法,但无法找到有关如何更改默认查询集的信息,即。 objects.all()。
如何在使用PassThroughManager时指定我的objects.all()将返回什么?
---编辑 -
对于未来的读者, django 1.7似乎有内置的PassThroughManager
https://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers-and-model-inheritance
答案 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()
答案 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)