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程序设计有所帮助。

相关文章

  • Python操作Redis数据库的超详细教程

    Python操作Redis数据库的超详细教程

    大家应该都知道redis是一个基于内存的高效的键值型非关系数据库,下面这篇文章主要给大家介绍了关于Python操作Redis的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • django API 中接口的互相调用实例

    django API 中接口的互相调用实例

    这篇文章主要介绍了django API 中接口的互相调用实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python Pandas学习之数据离散化与合并详解

    Python Pandas学习之数据离散化与合并详解

    Pandas是python的一个数据分析包,该工具是为解决数据分析任务而创建的。本文将通过示例详细为大家介绍一下Pandas的数据离散化与合并,需要的可以参考一下
    2022-02-02
  • Python调用API接口实现人脸识别

    Python调用API接口实现人脸识别

    本文主要介绍了Python调用API接口实现人脸识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 简单介绍Python2.x版本中的cmp()方法的使用

    简单介绍Python2.x版本中的cmp()方法的使用

    这篇文章主要介绍了简单介绍Python2.x版本中的cmp()方法的使用,然而该方法在Python3.x版本中已并不再内置...需要的朋友可以参考下
    2015-05-05
  • 关于NumPy中asarray的用法及说明

    关于NumPy中asarray的用法及说明

    这篇文章主要介绍了关于NumPy中asarray的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • python实现中文分词FMM算法实例

    python实现中文分词FMM算法实例

    这篇文章主要介绍了python实现中文分词FMM算法,实例分析了Python基于FMM算法进行中文分词的实现方法,涉及Python针对文件、字符串及正则匹配操作的相关技巧,需要的朋友可以参考下
    2015-07-07
  • 使用Python实现批量发送个性化邮件

    使用Python实现批量发送个性化邮件

    在现代工作环境中,我们经常需要向多个收件人发送个性化的邮件,因此本文小编为大家整理了Python实现批量发送个性化邮件的示例代码,希望对大家有所帮助
    2023-11-11
  • Python实现学生管理系统的完整代码(面向对象)

    Python实现学生管理系统的完整代码(面向对象)

    这篇文章主要介绍了Python实现学生管理系统的完整代码(面向对象),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • python 实现单例模式的5种方法

    python 实现单例模式的5种方法

    这篇文章主要介绍了python 实现单例模式的5种方法,帮助大家更好的理解和学习python 设计模式,感兴趣的朋友可以了解下
    2020-09-09

最新评论