前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模型继承

模型继承

作者头像
星哥玩云
发布2022-09-08 20:53:31
1360
发布2022-09-08 20:53:31
举报
文章被收录于专栏:开源部署开源部署

一、继承普通模型类

实现

代码语言:javascript
复制
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Animal</span><span class="hljs-params">(models.Model)</span>:</span>
    name = models.CharField(max_length=<span class="hljs-number">20</span>)
    age = models.IntegerField()
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Cat</span><span class="hljs-params">(Animal)</span>:</span>
    weight = models.IntegerField()
    <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span><span class="hljs-params">()</span>:</span>
        db_table = <span class="hljs-string">"cats"</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Dog</span><span class="hljs-params">(Animal)</span>:</span>
    height = models.IntegerField()
    <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span><span class="hljs-params">()</span>:</span>
        db_table = <span class="hljs-string">"dogs"</span>

问题

  • 在父类中定义的属性,子类表中没有,通过生成额外的父类表,子类表中通过外键关联父类表中的数据
  • 效率低

注意

此方式不建议使用

二、继承抽象模型类

原理

通过元信息将父类抽象化

实现

代码语言:javascript
复制
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Animal</span><span class="hljs-params">(models.Model)</span>:</span>
    name = models.CharField(max_length=<span class="hljs-number">20</span>)
    age = models.IntegerField()
    <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span><span class="hljs-params">()</span>:</span>
        <span class="hljs-comment">#将模型抽象化</span>
        abstract = <span class="hljs-keyword">True</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Cat</span><span class="hljs-params">(Animal)</span>:</span>
    weight = models.IntegerField()
    <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span><span class="hljs-params">()</span>:</span>
        db_table = <span class="hljs-string">"cats"</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Dog</span><span class="hljs-params">(Animal)</span>:</span>
    height = models.IntegerField()
    <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span><span class="hljs-params">()</span>:</span>
        db_table = <span class="hljs-string">"dogs"</span>

父类模型抽象化的作用

  • 父类模型不会在数据库中生成对应的数据表
  • 将父类中的属性添加到子类表字段中
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、继承普通模型类
  • 二、继承抽象模型类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com