django框架面向对象ORM模型继承用法实例分析

 更新时间:2019年07月29日 11:17:48   作者:我是猪行不  
这篇文章主要介绍了django框架面向对象ORM模型继承用法,结合实例形式分析了Django框架ORM模型抽象类继承、多表继承及代理模型继承三种继承方式实现技巧,需要的朋友可以参考下

本文实例讲述了django框架面向对象ORM模型继承用法。分享给大家供大家参考,具体如下:

Django ORM对模型继承的支持,将python面向对象的编程方法与数据库面向关系表的数据结构结合的很巧妙。支持三种风格的模型继承。

1.抽象类继承:父类继承自models.Model,但不会在底层数据库中生成相应的数据表,父类的属性列存储在其子类的数据表中。

2.多表继承:多表继承的每个模型类都在底层数据库中生成相应的数据表管理数据。

3.代理模型继承:父类用于在底层数据库中管理数据表,而子类不定义数据列,只定义查询数据表的排序方式等元数据。

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,并且分别定义独有的一个地段。三个类映射到数据库,会被定义为两个数据表(抽象基类不在底层数据库中声称数据表):

数据表:app_Moment:app代表应用,包括id、user_name、content、pub_date和headline五个字段

数据表: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,并且分别定义独有的一个字段。三个类映射到数据库,会被定义为三个数据表:

数据表:app_Moment:app代表应用,包括id、user_name、content、pub_date和headline五个字段

数据表:app_Coment: 包括包括id、user_name、content、pub_date和level五个字段

数据表:app_Message:包括包括id、user_name、content、pub_date四个字段

多表继承时,在子类实例中可以通过小写的父类名字引用父类的实力

e.g:

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

3.代理模型继承

前两种继承模型中子类都有实际存储数据的作用,而代理模型继承父类的数据而不存储实际的数据,代理模型继承通过在子类的Meta类中定义proxy=True属性来实现:

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根据pub_date倒序排列

Moment类用于存储数据,OrderByMoment类用于管理根据pub_date倒序排列的Moment

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

相关文章

  • 在CMD命令行中运行python脚本的方法

    在CMD命令行中运行python脚本的方法

    今天小编就为大家分享一篇在CMD命令行中运行python脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python Numpy:找到list中的np.nan值方法

    Python Numpy:找到list中的np.nan值方法

    今天小编就为大家分享一篇Python Numpy:找到list中的np.nan值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Django集成MongoDB实现过程解析

    Django集成MongoDB实现过程解析

    这篇文章主要介绍了Django集成MongoDB实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Python 解析pymysql模块操作数据库的方法

    Python 解析pymysql模块操作数据库的方法

    这篇文章主要介绍了Python 解析pymysql模块操作数据库的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python使用openai生成图像的超详细教程

    python使用openai生成图像的超详细教程

    OpenAI成功地训练了一个能够从文字标题生成图像的网络,它非常类似于GPT-3和图像GPT,并产生惊人的结果,下面这篇文章主要给大家介绍了关于python使用openai生成图像的超详细教程,需要的朋友可以参考下
    2023-03-03
  • Python中深浅拷贝的区别详细分析

    Python中深浅拷贝的区别详细分析

    深拷贝和浅拷贝都是对原对象的拷贝,都会生成一个看起来相同的对象,下面这篇文章主要给大家介绍了关于Python中深浅拷贝的区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 浅谈Python 函数式编程

    浅谈Python 函数式编程

    这篇文章主要介绍了Python 函数式编程的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 15个应该掌握的Jupyter Notebook使用技巧(小结)

    15个应该掌握的Jupyter Notebook使用技巧(小结)

    这篇文章主要介绍了15个应该掌握的Jupyter Notebook使用技巧(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Python手动实现Hough圆变换的示例代码

    Python手动实现Hough圆变换的示例代码

    Hough圆变换的原理相信大家都非常清楚了,但是手动实现的比较少。这篇文章将为大家介绍手动实现Hough圆变换的示例代码,需要的可以了解一下
    2022-01-01
  • django框架模板语言使用方法详解

    django框架模板语言使用方法详解

    这篇文章主要介绍了django框架模板语言使用方法,结合实例形式详细分析了Django框架常用的模板语言语法与相关使用技巧,需要的朋友可以参考下
    2019-07-07

最新评论