日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Django4.0教程:Django4.0管理器-自定義管理器和模型繼承

下面是Django如何處理自定義管理器和模型繼承:

炎陵網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

  1. 基類的管理器總是被子類以 Python 的普通名稱解析順序繼承(子類上的屬性會覆蓋所有父類上的同名屬性;直接父類會覆蓋更上一級的,以此類推)。
  2. 如果沒有在模型或其父類申明管理器,Django 會自動創(chuàng)建 ?objects ?管理器。
  3. 一個(gè)類的默認(rèn)管理器要么由 ?Meta.default_manager_name? 指定,要么是模型中申明的第一個(gè)管理器,或者是直接父模型的默認(rèn)管理器。

如果您想通過抽象基類在一組模型上安裝自定義管理器,但仍能自定義默認(rèn)管理器,這些規(guī)則提供了必要的靈活性。例如,假設(shè)有此基類:

class AbstractBase(models.Model):
    # ...
    objects = CustomManager()

    class Meta:
        abstract = True

如果您在子類中直接使用這一點(diǎn),如果您在基類中沒有聲明任何管理器,那么 ?objects將是默認(rèn)的管理器:

class ChildA(AbstractBase):
    # ...
    # This class has CustomManager as the default manager.
    pass

如果您想繼承 ?AbstractBase?,但提供不同的默認(rèn)管理器,則可以在子類上提供該默認(rèn)管理器:

class ChildB(AbstractBase):
    # ...
    # An explicit default manager.
    default_manager = OtherManager()

這里的 ?default_manager ?是默認(rèn)的。 ?objects ?管理器仍然可用,因?yàn)樗抢^承的,但沒有被當(dāng)做默認(rèn)管理器。
最后,對于這個(gè)示例,假設(shè)您想要向子類中添加額外的管理器,但是仍然使用來自 ?AbstractBase ?的默認(rèn)管理器。您不能直接在子類中添加新的管理器,因?yàn)檫@將覆蓋默認(rèn)管理器,并且您還必須顯式地申明來自抽象基類的所有管理器。解決方案是將這個(gè)管理器放到另一個(gè)基類中,并在默認(rèn)管理器 之后 將其引入繼承層次結(jié)構(gòu):

class ExtraManager(models.Model):
    extra_manager = OtherManager()

    class Meta:
        abstract = True

class ChildC(AbstractBase, ExtraManager):
    # ...
    # Default manager is CustomManager, but OtherManager is
    # also available via the "extra_manager" attribute.
    pass

請注意,雖然可以在抽象模型上定義自定義管理器,但不能使用抽象模型 調(diào)用 任何方法。即:

ClassA.objects.do_something()

上述是合法的,但如下會引發(fā)一個(gè)異常。這是因?yàn)楣芾砥饕庠诜庋b管理映射對象集合的邏輯。因?yàn)槟荒軗碛谐橄髮ο蟮募希怨芾沓橄髮ο笫菦]有意義的。如果您有適用于抽象模型的功能,則應(yīng)該將該功能放在抽象模型的 靜態(tài)方法 或 類方法 中:

AbstractBase.objects.do_something()

名稱欄目:創(chuàng)新互聯(lián)Django4.0教程:Django4.0管理器-自定義管理器和模型繼承
本文路徑:http://www.dlmjj.cn/article/dpgohdg.html