Django模型与经理

ree*_*oid 7 django django-models django-managers

不确定区别是什么.似乎所有管理器都有一堆与模型相关的功能.但是这些功能也可以放在模型中......

Django文档描述了Manager如下,

Manager是为Django模型提供数据库查询操作的接口.

那么管理器还有什么根本不同于这个简单的抽象?

或者更好的问题:在模型与经理中应该定义哪些方法?是否存在实际差异或只是文体差异?

kar*_*ikr 9

在Django中,模型管理器是模型执行数据库查询的对象.每个Django模型至少有一个管理器,objects您可以创建自己的管理器来更改默认行为.

所以,你的陈述

但是这些功能也可以放在模型中

好吧,不是因为模型依赖于默认管理器来检索查询集.

让我试着用一个例子来解释.让我们说你的应用程序需要一个模型对象来只显示状态为的对象published.现在,MyModel.objects.all()检索所有内容,您必须MyModel.objects.filter(published=True)每次都指定过滤器.

现在,您可以覆盖此默认行为.

class MyModelAdmin(admin.ModelAdmin):

    def queryset(self, request):
        return MyModel.objects.filter(published=True)
Run Code Online (Sandbox Code Playgroud)

我们刚刚做的是覆盖默认管理器的默认行为.

现在,让我们说你想要一切,你可以做类似的事情

class MyModelAdmin(admin.ModelAdmin):    
    def queryset(self, request):
        return MyModel.objects.filter(published=True)
    def all_objects(self, request):
        return MyModel.objects.all()
Run Code Online (Sandbox Code Playgroud)

在访问所有对象时,就这样做

MyModel.objects.all_objects()
Run Code Online (Sandbox Code Playgroud)

单个模型也可以有多个管理器

简而言之,管理员在访问模型的查询集方面提供了很大的灵活性.

  • 你不应该重写模型管理器上的方法,而不是模型管理器吗? (3认同)