每个模型至少有一个 Manager,默认名称是 objects。
:::info
Blog.objects
:::
Managers 只能通过模型类访问,而不是通过模型实例,目的是强制分离 “表级” 操作和 “行级” 操作。
你可以为一个模型添加任意多个管理器
class PollManager(models.Manager):
pass
class OpinionPoll(models.Model):
question = models.CharField(max_length=200)
objects = PollManager()
Book.objects.all() 会返回数据库中所有的书。
可以通过重写 Manager.get_queryset() 方法来覆盖 Manager 的基础 QuerySet
# First, define the Manager subclass.
class DahlBookManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(author='Roald Dahl')
# Then hook it into the Book model explicitly.
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
objects = models.Manager() # 默认的管理器
dahl_objects = DahlBookManager() # 自定义的管理器.
Book.objects.all()
会返回数据库中所有的书,而 Book.dahl_objects.all()
仅返回 Roald Dahl 写的书。
相关文档
https://docs.djangoproject.com/zh-hans/4.0/topics/db/queries/
https://docs.djangoproject.com/zh-hans/4.0/topics/db/managers/