阅读(3931) (0)

Django4.0 管理器-管理器调用自定义QuerySet方法

2022-03-15 09:56:26 更新

因为大部分的标准 ​QuerySet ​方法能直接从 ​Manager ​访问,这个实例仅适用于你在自定义 ​QuerySet ​中定义了额外方法,且在 ​Manager ​中实现了它们:

class PersonQuerySet(models.QuerySet):
    def authors(self):
        return self.filter(role='A')

    def editors(self):
        return self.filter(role='E')

class PersonManager(models.Manager):
    def get_queryset(self):
        return PersonQuerySet(self.model, using=self._db)

    def authors(self):
        return self.get_queryset().authors()

    def editors(self):
        return self.get_queryset().editors()

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    role = models.CharField(max_length=1, choices=[('A', _('Author')), ('E', _('Editor'))])
    people = PersonManager()

本例允许你从管理器 ​Person.people​ 直接调用 ​authors()​ 和 ​editors()​。