我在阅读django 文档,发现这两个类看起来很相似:
以下是django文档中的示例:
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()
在示例代码中,您可以看到PersonQuerySet
中的代码可以移动到PersonManager
(或将管理器移动到查询集)- 我的意思是我可以毫不费力地将一个合并到另一个中)
那么管理器和查询集之间有什么区别?它们是否具有不同的用例?还是应该只使用其中一个并忽略另一个的存在?