在Django获得对经理的询问
据我所知,我们的数据库是由模型管理员提供的,对吗 e、 g.在Django获得对经理的询问,django,Django,据我所知,我们的数据库是由模型管理员提供的,对吗 e、 g.queryset=Model.objects.all() 但有时,我看到一些代码看起来几乎一样,但有点不同 post=self.get\u queryset() 它还获取数据库,但不由管理器获取 manager和get_queryset()获取数据库与它们的用法有什么区别?下面的示例帮助您了解什么是ModelManager和get_queryset: class PersonQuerySet(models.QuerySet):
queryset=Model.objects.all()
但有时,我看到一些代码看起来几乎一样,但有点不同
post=self.get\u queryset()
它还获取数据库,但不由管理器获取
manager和get_queryset()获取数据库与它们的用法有什么区别?下面的示例帮助您了解什么是
ModelManager
和get_queryset
:
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()
每个模型至少有一个模型管理器,get\u queryset
是模型管理器库queryset
。
当您使用Person.objects.all()
时,它将返回来自Person
模型的所有结果,而不是过滤器或其他任何内容
在上面的示例中,我们使用一个名为PersonManager
的自定义模型管理器,其中覆盖get\u queryset
。
首先,我们使用role='A'
应用authors
过滤器。
其次,我们使用role='E'
应用编辑器
过滤器
所以,现在如果我们使用
Person.people.all()
它将只返回作者
。看这里,我们使用all()
,但它只返回作者
。因为我们覆盖了默认的模型管理器查询集。您是在谈论基于类的视图吗?