我不太确定两者的区别。看起来,Manager只是具有与Model相关的一堆函数。但这些函数也可以放在Model中....
Django文档如下描述了Manager:
Manager是向Django模型提供数据库查询操作的接口。
那么,Manager除了这个简单的抽象之外还有什么根本上的区别吗?
或者更好的问题是:哪些方法应该在Model中定义,哪些应该在Manager中定义?实际上是否有区别,还是只是风格上的区别?
我不太确定两者的区别。看起来,Manager只是具有与Model相关的一堆函数。但这些函数也可以放在Model中....
Django文档如下描述了Manager:
Manager是向Django模型提供数据库查询操作的接口。
那么,Manager除了这个简单的抽象之外还有什么根本上的区别吗?
或者更好的问题是:哪些方法应该在Model中定义,哪些应该在Manager中定义?实际上是否有区别,还是只是风格上的区别?
objects
,您可以创建自己的管理器以更改默认行为。published
状态的对象。现在,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()
一个模型可以拥有多个管理器,这也是可能的
简而言之,管理器在访问模型的查询集方面提供了很大的灵活性。