每个模型至少有一个 Manager,默认名称是 objects。

    :::info

    Blog.objects
    :::

    Managers 只能通过模型类访问,而不是通过模型实例,目的是强制分离 “表级” 操作和 “行级” 操作。
    你可以为一个模型添加任意多个管理器

    1. class PollManager(models.Manager):
    2. pass
    3. class OpinionPoll(models.Model):
    4. question = models.CharField(max_length=200)
    5. objects = PollManager()

    Book.objects.all() 会返回数据库中所有的书。
    可以通过重写 Manager.get_queryset() 方法来覆盖 Manager 的基础 QuerySet

    1. # First, define the Manager subclass.
    2. class DahlBookManager(models.Manager):
    3. def get_queryset(self):
    4. return super().get_queryset().filter(author='Roald Dahl')
    5. # Then hook it into the Book model explicitly.
    6. class Book(models.Model):
    7. title = models.CharField(max_length=100)
    8. author = models.CharField(max_length=50)
    9. objects = models.Manager() # 默认的管理器
    10. 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/