亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

1.抽象基類(lèi)繼承舉例如下:

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 #證明該類(lèi)是抽象基類(lèi)
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])

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

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

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

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])

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

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

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

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

多表繼承時(shí),在子類(lèi)實(shí)例中可以通過(guò)小寫(xiě)的父類(lèi)名字引用父類(lèi)的實(shí)力

e.g:

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

3.代理模型繼承

前兩種繼承模型中子類(lèi)都有實(shí)際存儲(chǔ)數(shù)據(jù)的作用,而代理模型繼承父類(lèi)的數(shù)據(jù)而不存儲(chǔ)實(shí)際的數(shù)據(jù),代理模型繼承通過(guò)在子類(lèi)的Meta類(lèi)中定義proxy=True屬性來(lái)實(shí)現(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): #使用代理模型繼承的原因是子類(lèi)中新的特性不會(huì)影響父類(lèi)的模型及其已有代碼的行為
  class Meta:
    proxy  = True
    ordering = ['-pub_date']  #Moment根據(jù)pub_date倒序排列

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

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

相關(guān)文章

  • Python操作Redis數(shù)據(jù)庫(kù)的超詳細(xì)教程

    Python操作Redis數(shù)據(jù)庫(kù)的超詳細(xì)教程

    大家應(yīng)該都知道redis是一個(gè)基于內(nèi)存的高效的鍵值型非關(guān)系數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Python操作Redis的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • django API 中接口的互相調(diào)用實(shí)例

    django API 中接口的互相調(diào)用實(shí)例

    這篇文章主要介紹了django API 中接口的互相調(diào)用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python Pandas學(xué)習(xí)之?dāng)?shù)據(jù)離散化與合并詳解

    Python Pandas學(xué)習(xí)之?dāng)?shù)據(jù)離散化與合并詳解

    Pandas是python的一個(gè)數(shù)據(jù)分析包,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。本文將通過(guò)示例詳細(xì)為大家介紹一下Pandas的數(shù)據(jù)離散化與合并,需要的可以參考一下
    2022-02-02
  • Python調(diào)用API接口實(shí)現(xiàn)人臉識(shí)別

    Python調(diào)用API接口實(shí)現(xiàn)人臉識(shí)別

    本文主要介紹了Python調(diào)用API接口實(shí)現(xiàn)人臉識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 簡(jiǎn)單介紹Python2.x版本中的cmp()方法的使用

    簡(jiǎn)單介紹Python2.x版本中的cmp()方法的使用

    這篇文章主要介紹了簡(jiǎn)單介紹Python2.x版本中的cmp()方法的使用,然而該方法在Python3.x版本中已并不再內(nèi)置...需要的朋友可以參考下
    2015-05-05
  • 關(guān)于NumPy中asarray的用法及說(shuō)明

    關(guān)于NumPy中asarray的用法及說(shuō)明

    這篇文章主要介紹了關(guān)于NumPy中asarray的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python實(shí)現(xiàn)中文分詞FMM算法實(shí)例

    python實(shí)現(xiàn)中文分詞FMM算法實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)中文分詞FMM算法,實(shí)例分析了Python基于FMM算法進(jìn)行中文分詞的實(shí)現(xiàn)方法,涉及Python針對(duì)文件、字符串及正則匹配操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 使用Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件

    使用Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件

    在現(xiàn)代工作環(huán)境中,我們經(jīng)常需要向多個(gè)收件人發(fā)送個(gè)性化的郵件,因此本文小編為大家整理了Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件的示例代碼,希望對(duì)大家有所幫助
    2023-11-11
  • Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的完整代碼(面向?qū)ο?

    Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的完整代碼(面向?qū)ο?

    這篇文章主要介紹了Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的完整代碼(面向?qū)ο?,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • python 實(shí)現(xiàn)單例模式的5種方法

    python 實(shí)現(xiàn)單例模式的5種方法

    這篇文章主要介紹了python 實(shí)現(xiàn)單例模式的5種方法,幫助大家更好的理解和學(xué)習(xí)python 設(shè)計(jì)模式,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論