Django4.0 管理器-基礎(chǔ)管理器

2022-03-16 18:04 更新

Model._base_manager

用于訪問關(guān)聯(lián)對象的管理器

默認情況下,Django 訪問關(guān)聯(lián)對象(即 ?choice.question?)時使用 ?Model._base_manager? 管理器類的實例,而不是關(guān)聯(lián)對象的 ?_default_manager?。這是因為 Django 要檢索那些可能被默認管理器篩選掉(所以無法訪問)的關(guān)聯(lián)對象。

若基本管理器類 (?django.db.models.Manager?) 無法滿足需求,你可以通過設(shè)置 ?Meta.base_manager_name ?告訴 Django 使用哪個類。

在關(guān)聯(lián)模型上執(zhí)行查詢時不會使用基礎(chǔ)管理器,或者當(dāng)訪問一對多或多對多關(guān)系。例如,來自教程的模型 ?Question ?有個 ?deleted ?字段,還有一個基礎(chǔ)管理器,用于過濾掉 ?deleted=True? 的實例。由 ?Choice.objects.filter(question__name__startswith='What') ?返回的查詢結(jié)果集會包含關(guān)聯(lián)至已刪除的問題的選項。

不要在這類管理器子類中過濾掉任何結(jié)果

該管理器用于訪問由其它模型關(guān)聯(lián)過來的對象。這些情況下,Django 要能訪問待獲取模型的全部對象,這樣就能檢索出其指向的 任何東西。
因此,你不應(yīng)該覆蓋 ?get_queryset()? 來過濾任何?rows?。如果你這么做,Django 會返回不完整的結(jié)果。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號