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

Python 如何在Django中以编程方式获取模型的管理器实例,python,django,django-models,django-managers,Python,Django,Django Models,Django Managers,我在模型中添加了一个自定义管理器,如下所示: class StandardManagerModel(models.Model): pass class PublishableManager(models.Manager): pass class Publishable(models.Model): published_objects = PublishableManager() 这将从模型中删除默认的.objects管理器。如何检索模型类中声明的默认管理器?我想要一

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

class StandardManagerModel(models.Model):
    pass

class PublishableManager(models.Manager):
    pass

class Publishable(models.Model):
    published_objects = PublishableManager()
这将从模型中删除默认的
.objects
管理器。如何检索模型类中声明的默认管理器?我想要一个函数,如
get\u default\u manager()

如果使用自定义管理器对象,请注意,第一个管理器Django遇到的对象(,按照它们在模型中定义的顺序)具有特殊状态。Django将类中定义的第一个管理器解释为“默认”管理器,Django的几个部分(包括dumpdata)将专门为该模型使用该管理器。因此,在选择默认管理器时要小心,以避免覆盖get_queryset()导致无法检索您想要使用的对象的情况

您还可以提供默认管理器

objects = models.Manager()
published_objects = PublishableManager()

如果使用自定义管理器对象,请注意,第一个管理器Django遇到的对象(,按照它们在模型中定义的顺序)具有特殊状态。Django将类中定义的第一个管理器解释为“默认”管理器,Django的几个部分(包括dumpdata)将专门为该模型使用该管理器。因此,在选择默认管理器时要小心,以避免覆盖get_queryset()导致无法检索您想要使用的对象的情况

您还可以提供默认管理器

objects = models.Manager()
published_objects = PublishableManager()

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

Model._default_manager

还有
模型。_base\u manager
,我只能假设,如果您不提供默认的管理器,它就是默认的管理器。

看起来您根本不需要函数。它存储为模型上的一个属性:

Model._default_manager

还有
模型。_base\u manager
,我只能假设,如果您不提供默认的管理器,它就是默认的管理器。

通常,如果您想这样做,您将通过替换对象来保持多态模型…
类Publishable(models.Model):
\n
published\u objects=PublishableManager()
\n
objects=published\u objects
大多数情况下,如果您想这样做,您将通过替换对象来保持多态模型…
class published(models.model):
\n
published\u objects=publishedablemanager()
\n
objects=published\u objects