所以,我已經閱讀了大部分的文檔,並且我一直在環視這個問題,但是我無法完全找到我的問題的答案。我將從代碼開始。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'一樣。 –