所以,我已经阅读了大部分的文档,并且我一直在环视这个问题,但是我无法完全找到我的问题的答案。我将从代码开始。Django Managers的顺序会影响哪些功能?
# Manager
class ActiveManager(models.Manager):
def get_query_set(self):
return super(ActiveManager, self).get_query_set().filter(is_active=True)
# Model
class ModelA(models.Model):
# ...
is_active = models.BooleanField()
objects = ActiveManager()
all_objects = models.Manager()
所以,我打转转,而我注意到,如果我写的这种方式和使用get_object_or_404()
,那么它将使用ActiveManager
先搜索所有活动记录,然后返回一个有关我的查询。但是,如果我换了经理的顺序:
class ModelA(models.Model):
# ...
all_objects = models.Manager()
objects = ActiveManager()
然后,它使用默认的经理,在这种情况下all_objects
,做查询。我想知道这种变化会对其他功能产生什么影响。
编辑:据我所知,第一个经理发现,在类成为默认的经理,但我不知道具体的功能使用默认的管理器,它(如get_object_or_404
)
是啊,我读了,但我不知道它具体的东西会用_default_manager这样我就可以看出来他们。最常见的可能足够好 –
@Bryce Siedschlaw,我发现Django引用模型的'objects'属性的代码中的唯一位置(即,动态传递的 - 当然他们使用'User .objects','Site.objects'等)是[here](https://code.djangoproject.com/browser/django/trunk/django/views/generic/create_update.py#L78)(但是基于函数的通用视图反正也被弃用)。特别是,通用视图默认使用'_default_manager'。 –
你不会偶然知道任何使用_default_manager的特定常用函数吗?像'get_object_or_404'一样。 –