Django4.0 管理器-管理器调用自定义QuerySet方法
因为大部分的标准 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()
。