探秘
之前我们经常用object来进行表之间的查询
Student.objects.all()
默认全部返回,如果想根据条件筛选返回,比如逻辑删除isdelete字段,可以自己来写这个objects及all方法
点击objects,能看到是来自父类管理器Manager
class Manager(BaseManager.from_queryset(QuerySet)):
pass
其中all方法,实际上相当于get_queryset方法
def all(self): return self.get_queryset()
制作
我们现在自己来写,在model里新建类,参数是管理器
除了写all方法,我们还可以写get_queryset方法,本质是一样的
这里用一个筛选已删除,一个筛选未删除
使用的时候让objects赋值即可
from django.db.models import Manager
class CustomManager(Manager):
# self表示当前对象
def all(self):
return Manager.all(self).filter(isdelete=True)