Django 三種模型繼承

2021-09-02 01:26:30 字數 1321 閱讀 7469

父類繼承來自model.model, 但不會在底層資料庫生成相應的資料表,父類的屬性列儲存在其子類的資料表中

作用:多個表若有相同的字段時,可以將這些字段統一定義在抽象類中

要求:

class basemodel(models.model):

creat_time = models.datetimefield(auto_now_add=true, verbose_name="建立時間")

update_time = models.datetimefield(auto_now=true, verbose_name="更新時間")

is_delete = models.booleanfield(default=false, verbose_name="是否刪除")

class meta:

abstract = true

每個模型類都會在底層資料庫中生成相應的資料表管理資料

父類中的字段不會重複地在對個子類相關的資料表中進行定義

from django import models

class messagebase(models.model):

id = models.autofield()

content = models.charfield(max_length=100)

user_name= models.charfield(max_length=20)

class moment(messagebase):

headline = models.charfield(max_length=200)

# moment中包含的字段 id, headline

# 子類可以直接引用父類定義的字段, 子類可以通過父類物件訪問父類例項

**模型中子類只用於管理父類的資料,而不實際儲存資料

使用原因:

子類中的新特性不會影響父類行為以及已有**的行為

from django.db import models

class moment(models.model):

headline = models.charfield(max_length=200)

user_name = models.charfield(max_legth=20)

pub_date = models.datefield()

class orderedmoment(moment):

class meta:

proxy = true # 是否為**模型

ordering = ["-pub_date"] #預設排序

C 三種繼承

1 公有 私有 受保護繼承 class b public a class b public a class b protected a 繼承方式 成員型別 public protected private public public protected 無法繼承 protected protecte...

三種繼承方式

派生類繼承了基類的全部資料成員和除了建構函式,析構函式之外的全部資料成員,但是這些成員的訪問屬性在派生的過程中是可以調整的。從基類繼承的成員,其訪問屬性由繼承方式控制。類的公有繼承 當繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可直接訪問。類的私有繼承 ...

三種繼承表

乙個子類一張表 並與主類 父類 共享主表 這種關係中,將父類單獨對映到一張主表,而為子類分別單獨設立一張子表,子表中只包含子類所擴充套件的屬性,同時,子類和父類通過關係型資料庫的外來鍵關聯 name hibernate.belle.animal table t animal name id clas...