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

若基本管理器類 (?django.db.models.Manager?) 無法滿足需求,你可以通過設(shè)置 ?Meta.base_manager_name ?告訴 Django 使用哪個(gè)類。
在關(guān)聯(lián)模型上執(zhí)行查詢時(shí)不會(huì)使用基礎(chǔ)管理器,或者當(dāng)訪問一對(duì)多或多對(duì)多關(guān)系。例如,來自教程的模型 ?Question ?有個(gè) ?deleted ?字段,還有一個(gè)基礎(chǔ)管理器,用于過濾掉 ?deleted=True? 的實(shí)例。由 ?Choice.objects.filter(question__name__startswith='What') ?返回的查詢結(jié)果集會(huì)包含關(guān)聯(lián)至已刪除的問題的選項(xiàng)。
不要在這類管理器子類中過濾掉任何結(jié)果
該管理器用于訪問由其它模型關(guān)聯(lián)過來的對(duì)象。這些情況下,Django 要能訪問待獲取模型的全部對(duì)象,這樣就能檢索出其指向的 任何東西。
因此,你不應(yīng)該覆蓋 ?get_queryset()? 來過濾任何?rows?。如果你這么做,Django 會(huì)返回不完整的結(jié)果。
新聞名稱:創(chuàng)新互聯(lián)Django4.0教程:Django4.0管理器-基礎(chǔ)管理器
新聞來源:http://www.fisionsoft.com.cn/article/cophedg.html


咨詢
建站咨詢
