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