W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
要替換前面的要求復(fù)制 ?QuerySet
?和 ?Manager
?方法的方案, 可以用 ?QuerySet.as_manager()
? 創(chuàng)建一個(gè) ?Manager
?實(shí)例,拷貝了自定義 ?QuerySet
?的方法:
class Person(models.Model):
...
people = PersonQuerySet.as_manager()
由 ?QuerySet.as_manager()
? 創(chuàng)建的 ?Manager
?實(shí)例實(shí)質(zhì)上等價(jià)于前面例子中的 ?PersonManager
?。
不是每個(gè) ?QuerySet
?方法在 ?Manager
?層都是有意義的;例如,我們故意阻止 ?QuerySet.delete()
? 被拷貝進(jìn) ?Manager
?類(lèi)中。
方法拷貝規(guī)則如下:
queryset_only
?屬性值為 ?False
?的方法總是會(huì)被復(fù)制。queryset_only
?屬性值為 ?True
?的方法永遠(yuǎn)不會(huì)被復(fù)制。例如:
class CustomQuerySet(models.QuerySet):
# Available on both Manager and QuerySet.
def public_method(self):
return
# Available only on QuerySet.
def _private_method(self):
return
# Available only on QuerySet.
def opted_out_public_method(self):
return
opted_out_public_method.queryset_only = True
# Available on both Manager and QuerySet.
def _opted_in_private_method(self):
return
_opted_in_private_method.queryset_only = False
對(duì)于進(jìn)階用法,你可能同時(shí)要一個(gè)自定義 ?Manager
?和一個(gè)自定義 ?QuerySet
?。你可以通過(guò)調(diào)用 ?Manager.from_queryset()
? 達(dá)成目的,這將會(huì)返回一個(gè)自定義基礎(chǔ) ?Manager
?的子類(lèi),帶有一份自定義 ?QuerySet
?方法的拷貝:
class CustomManager(models.Manager):
def manager_only_method(self):
return
class CustomQuerySet(models.QuerySet):
def manager_and_queryset_method(self):
return
class MyModel(models.Model):
objects = CustomManager.from_queryset(CustomQuerySet)()
還可以將生成的類(lèi)存儲(chǔ)到變量中:
MyManager = CustomManager.from_queryset(CustomQuerySet)
class MyModel(models.Model):
objects = MyManager()
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: