在 Django 中,模型管理器是模型执行数据库查询的对象。每个 Django 模型至少有一个管理器,即objects
,并且您可以创建自己的来更改默认行为。
所以,你的陈述
但这些功能也可以放在模型中
好吧,并不是真的,因为模型仍然依赖于默认管理器来检索查询集。
让我尝试用一个例子来解释。假设您的应用程序需要一个模型对象来仅显示状态为published
. Now, MyModel.objects.all()
检索所有内容,并且您必须指定过滤器MyModel.objects.filter(published=True)
每一次。
现在,您可以覆盖此默认行为。
class MyModelAdmin(admin.ModelAdmin):
def queryset(self, request):
return MyModel.objects.filter(published=True)
我们刚刚所做的是覆盖默认管理器的默认行为。
现在,假设你想要一切,你可以做类似的事情
class MyModelAdmin(admin.ModelAdmin):
def queryset(self, request):
return MyModel.objects.filter(published=True)
def all_objects(self, request):
return MyModel.objects.all()
在访问所有对象时,只需执行以下操作
MyModel.objects.all_objects()
也可以有多个经理到一个模型 https://docs.djangoproject.com/en/dev/topics/db/managers/#modifying-initial-manager-querysets
简而言之,管理人员在访问模型的查询集方面提供了很大的灵活性。