Django经理的顺序会影响哪些功能?

2024-09-30 18:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我读了大部分的文件,我也到处找了这么多,但我找不到我问题的答案。我先从密码开始。在

# Manager
class ActiveManager(models.Manager):
    def get_query_set(self):
        return super(ActiveManager, self).get_query_set().filter(is_active=True)
^{pr2}$

所以,当我在玩的时候,我注意到如果我这样写它并使用get_object_or_404(),那么它将使用ActiveManager首先搜索所有活动记录,然后返回与我的查询相关的记录。但是,如果我改变了经理的顺序:

class ModelA(models.Model):
    # ...
    all_objects = models.Manager()
    objects = ActiveManager()

然后它使用默认管理器(在本例中是all_objects)来执行查询。我想知道这种变化会影响到其他什么功能。在

EDIT:我知道类中找到的第一个管理器成为默认管理器,但是我想知道哪些特定函数使用这个默认管理器(比如get_object_or_404


Tags: or文件self管理器getobjectsobjectmodels
2条回答

它影响很多事情。管理器的默认名称objects,只是一个默认名称,但不是必需的。如果您没有在模型定义中包含objects,而只是将一个管理器定义为all_objectsModelA.objects就不存在了。如果模型中没有其他管理器,并且您还没有自己定义objects,那么Django只会为它分配一个默认的管理器。在

无论如何,由于这个原因,Django获取模型中定义的第一个管理器并将其称为“default”,然后在需要引用模型管理器的任何时候使用“default”管理器(因为它不能简单地使用objects,因为objects可能没有定义)。在

经验法则是Django应该使用的标准管理器(从某种意义上说,应该是最通常使用的管理器)应该是第一个定义的管理器,不管它是被分配给objects还是完全其他的东西。其他的经理都应该在那之后。在

相关问题 更多 >