最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django框架面向?qū)ο驩RM模型繼承用法實例分析

 更新時間:2019年07月29日 11:17:48   作者:我是豬行不  
這篇文章主要介紹了django框架面向?qū)ο驩RM模型繼承用法,結(jié)合實例形式分析了Django框架ORM模型抽象類繼承、多表繼承及代理模型繼承三種繼承方式實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了django框架面向?qū)ο驩RM模型繼承用法。分享給大家供大家參考,具體如下:

Django ORM對模型繼承的支持,將python面向?qū)ο蟮木幊谭椒ㄅc數(shù)據(jù)庫面向關(guān)系表的數(shù)據(jù)結(jié)構(gòu)結(jié)合的很巧妙。支持三種風格的模型繼承。

1.抽象類繼承:父類繼承自models.Model,但不會在底層數(shù)據(jù)庫中生成相應(yīng)的數(shù)據(jù)表,父類的屬性列存儲在其子類的數(shù)據(jù)表中。

2.多表繼承:多表繼承的每個模型類都在底層數(shù)據(jù)庫中生成相應(yīng)的數(shù)據(jù)表管理數(shù)據(jù)。

3.代理模型繼承:父類用于在底層數(shù)據(jù)庫中管理數(shù)據(jù)表,而子類不定義數(shù)據(jù)列,只定義查詢數(shù)據(jù)表的排序方式等元數(shù)據(jù)。

1.抽象基類繼承舉例如下:

from django.db import models
class Message(models.Model):
  id    = models.AutoField(default=0)
  content  = models.CharField(max_length=100)
  user_name = models.CharField(max_length=80)
  pub_date = models.DateField()
  class Meta:
    abstract = True #證明該類是抽象基類
class Moment(Message):
  headline = models.CharField(max_length=50)
LEVELS = (
  ('1', 'Very Good'),
  ('2', 'Good'),
  ('3', 'Normal'),
  ('4', 'Bad'),
)
class Coment(Message):
  level = models.CharField(max_length=50, choices=LEVELS, default=LEVELS[3])

抽象基類Message,用于保存消息的四個字段:id、content、user_name和pub_date。子類Moment和Coment分別繼承Message,并且分別定義獨有的一個地段。三個類映射到數(shù)據(jù)庫,會被定義為兩個數(shù)據(jù)表(抽象基類不在底層數(shù)據(jù)庫中聲稱數(shù)據(jù)表):

數(shù)據(jù)表:app_Moment:app代表應(yīng)用,包括id、user_name、content、pub_date和headline五個字段

數(shù)據(jù)表:app_Coment: 包括包括id、user_name、content、pub_date和level五個字段

2.多表繼承

from django.db import models
class Message(models.Model):
  id    = models.AutoField(default=0)
  content  = models.CharField(max_length=100)
  user_name = models.CharField(max_length=80)
  pub_date = models.DateField()
class Moment(Message):
  headline = models.CharField(max_length=50)
LEVELS = (
  ('1', 'Very Good'),
  ('2', 'Good'),
  ('3', 'Normal'),
  ('4', 'Bad'),
)
class Coment(Message):
  level = models.CharField(max_length=50, choices=LEVELS, default=LEVELS[3])

類Message,用于保存消息的四個字段:id、content、user_name和pub_date。子類Moment和Coment分別繼承Message,并且分別定義獨有的一個字段。三個類映射到數(shù)據(jù)庫,會被定義為三個數(shù)據(jù)表:

數(shù)據(jù)表:app_Moment:app代表應(yīng)用,包括id、user_name、content、pub_date和headline五個字段

數(shù)據(jù)表:app_Coment: 包括包括id、user_name、content、pub_date和level五個字段

數(shù)據(jù)表:app_Message:包括包括id、user_name、content、pub_date四個字段

多表繼承時,在子類實例中可以通過小寫的父類名字引用父類的實力

e.g:

al = Moment(xx, user_name="test")
print(al.message.user_name) #-------> test

3.代理模型繼承

前兩種繼承模型中子類都有實際存儲數(shù)據(jù)的作用,而代理模型繼承父類的數(shù)據(jù)而不存儲實際的數(shù)據(jù),代理模型繼承通過在子類的Meta類中定義proxy=True屬性來實現(xiàn):

from django.db import models
class Mement(models. Model):
  id    = models.AutoField(default=0)
  content  = models.CharField(max_length=100)
  user_name = models.CharField(max_length=80)
  pub_date = models.DateField()
class OrderByMoment(Moment): #使用代理模型繼承的原因是子類中新的特性不會影響父類的模型及其已有代碼的行為
  class Meta:
    proxy  = True
    ordering = ['-pub_date']  #Moment根據(jù)pub_date倒序排列

Moment類用于存儲數(shù)據(jù),OrderByMoment類用于管理根據(jù)pub_date倒序排列的Moment

希望本文所述對大家基于Django框架的Python程序設(shè)計有所幫助。

相關(guān)文章

  • python dict如何定義

    python dict如何定義

    在本篇文章里小編給大家整理的是關(guān)于python dict如何定義的相關(guān)知識點內(nèi)容,需要的朋友們可以參考下。
    2020-09-09
  • 使用 Python ssh 遠程登陸服務(wù)器的最佳方案

    使用 Python ssh 遠程登陸服務(wù)器的最佳方案

    這篇文章主要介紹了使用 Python ssh 遠程登陸服務(wù)器的最佳方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Django+Vue實現(xiàn)文件上傳下載的項目實踐

    Django+Vue實現(xiàn)文件上傳下載的項目實踐

    本文主要介紹了Django+Vue實現(xiàn)文件上傳下載的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • PyTorch環(huán)境中CUDA版本沖突問題排查與解決方案

    PyTorch環(huán)境中CUDA版本沖突問題排查與解決方案

    在使用 PyTorch 進行深度學習開發(fā)時,CUDA 版本兼容性問題是個老生常談的話題,本文將通過一次真實的排查過程,剖析 PyTorch 虛擬環(huán)境自帶 CUDA 運行時庫與系統(tǒng)全局 CUDA 環(huán)境沖突的場景,需要的朋友可以參考下
    2025-02-02
  • Python實現(xiàn)各種排序算法的代碼示例總結(jié)

    Python實現(xiàn)各種排序算法的代碼示例總結(jié)

    這篇文章主要介紹了Python實現(xiàn)各種排序算法的代碼示例總結(jié),其實Python是非常好的算法入門學習時的配套高級語言,需要的朋友可以參考下
    2015-12-12
  • VScode編寫第一個Python程序HelloWorld步驟

    VScode編寫第一個Python程序HelloWorld步驟

    VScode是微軟去年推出的一款輕量級編輯器,功能上和Atom、Sublime Text、Vim類似,你可以通過配置將它打造成合適的IDE,這里簡單介紹一下,需要的朋友可以參考下
    2018-04-04
  • Py之pycocotools庫的簡介、安裝、使用方法及說明

    Py之pycocotools庫的簡介、安裝、使用方法及說明

    這篇文章主要介紹了Py之pycocotools庫的簡介、安裝、使用方法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python中print格式化輸出的問題

    python中print格式化輸出的問題

    所謂格式化輸出,就是創(chuàng)建一個可以嵌入變量內(nèi)容的字符串。這篇文章主要介紹了python中print格式化輸出,需要的朋友可以參考下
    2021-04-04
  • TensorFlow如何指定GPU訓練模型

    TensorFlow如何指定GPU訓練模型

    這篇文章主要介紹了TensorFlow如何指定GPU訓練模型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用Python實現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換方法

    利用Python實現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換方法

    JSON(JavaScript Object Nonation)是利用鍵值對+嵌套來表示數(shù)據(jù)的一種格式,以其輕量、易解析的優(yōu)點,這篇文章主要介紹了利用Python實現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換,需要的朋友可以參考下
    2019-07-07

最新評論

宁陕县| 怀集县| 紫云| 侯马市| 水城县| 资阳市| 湖南省| 睢宁县| 武夷山市| 蒙阴县| 铜陵市| 辽阳市| 万盛区| 铁岭县| 蓬莱市| 平乐县| 神木县| 承德市| 孝昌县| 东乌| 藁城市| 厦门市| 仙居县| 普定县| 建始县| 嘉鱼县| 许昌县| 宁城县| 固原市| 南雄市| 黄山市| 梨树县| 勐海县| 淮阳县| 章丘市| 大姚县| 巴东县| 古交市| 武威市| 威海市| 黄龙县|