我有一个自定义管理器添加到模型中:
class StandardManagerModel(models.Model):
pass
class PublishableManager(models.Manager):
pass
class Publishable(models.Model):
published_objects = PublishableManager()
这将从模型中删除默认的.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
答案 0 :(得分:2)
看起来你根本不需要任何功能。它作为属性存储在模型中:
Model._default_manager
还有Model._base_manager
,我只能假设,如果你不提供默认管理员,那就是默认管理员。
答案 1 :(得分:0)
来自docs
如果您使用自定义管理器对象,请注意第一个管理器Django遇到(按照它们在模型中定义的顺序)具有特殊状态。 Django将类中定义的第一个Manager解释为“默认”管理器,Django的几个部分(包括dumpdata)将专门为该模型使用该Manager。因此,在选择默认管理器时要小心谨慎,以避免重写get_queryset()导致无法检索您想要使用的对象。
您也可以提供默认管理器
objects = models.Manager()
published_objects = PublishableManager()