【发布时间】:2021-06-16 13:28:24
【问题描述】:
我正在浏览模型管理器的 Django 文档。我看到in this section 我看到那个model.QuerySet 类被一个自定义QuerySet 类覆盖,该类有两个方法通过过滤role='A' 或role='E' 返回查询集。
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()
但是当我们可以像这样在模型管理器本身中完成过滤时,我不明白在 QuerySet 类中过滤的需要是什么。
class PersonManager(models.manager):
def authors(self):
return self.filter(role='A')
def editors(self):
return self.filter(role='E')
请帮助理解其中的区别。提前谢谢你。
【问题讨论】:
-
不同之处在于您不能链接模型
Manager中存在的方法。
标签: python django django-queryset