如何以编程方式获取 Django 中模型的管理器实例

Mar*_*mro 2 python django django-models django-managers

我在模型中添加了一个自定义管理器,如下所示:

class StandardManagerModel(models.Model):
    pass

class PublishableManager(models.Manager):
    pass

class Publishable(models.Model):
    published_objects = PublishableManager()
Run Code Online (Sandbox Code Playgroud)

.objects这将从模型中删除默认管理器。如何检索模型类中声明的默认管理器?我想要一个像这样的函数get_default_manager()

manager = get_default_manager(Publishable)
assert manager is Publishable.published_objects

manager = get_default_manager(StandardManagerModel)
assert manager is StandardManagerModel.objects
Run Code Online (Sandbox Code Playgroud)

rad*_*uit 5

看起来你根本不需要函数。它作为属性存储在模型上:

Model._default_manager
Run Code Online (Sandbox Code Playgroud)

还有Model._base_manager,我只能假设如果您不提供默认管理器,它就是默认管理器。