默認(rèn)的Manager名稱為objects
如果在model中定義了類型為models.Manager的屬性 則會(huì)替換
自定義manager
可以通過(guò)派生Manager來(lái)生成自定義Manager糙及,添加額外的方法,添加或修改原始的manager的返回值
添加額外的方法
數(shù)據(jù)表級(jí)別的方法 如果想定義行級(jí)別的方法應(yīng)該定義在model中
額外的方法可以返回任意值
改變初始的queryset
可以重載get_queryset方法來(lái)控制
可以在model中設(shè)置很多manager
Default Manager
Model._default_manager
django認(rèn)為在model中的第一個(gè)Manger是default manager
也可在Meta中設(shè)置default_manager_name
使用的時(shí)候做為_(kāi)default_manager蓝厌,這個(gè)對(duì)于三方擴(kuò)展有用魏保,避免objects被替換出錯(cuò),不能假定使用的Model中有objects
Base Manager
Model._base_manager
_base_manager漂坏,是在獲取關(guān)聯(lián)對(duì)象時(shí)使用景埃,可通過(guò)Meta中設(shè)置base_manager_name(原因是Django需要獲取到關(guān)聯(lián)對(duì)象即使它被過(guò)濾掉而在default manager中不能獲取)
自定義queryset
在自定義queryset中定義的方法顶别,需要再model定義一個(gè)對(duì)應(yīng)的使用的方法谷徙,通過(guò)get_queryset獲得queryset,再在其上調(diào)用該方法
通過(guò)queryset創(chuàng)建manager
除了像上述的創(chuàng)建重復(fù)方法驯绎,可以通過(guò)
people = PersonQuerySet.as_manager()
會(huì)復(fù)制:公開(kāi)方法完慧、設(shè)置了queryset_only屬性為False的方法
Manager.from_queryset()