SQL中的父子表、在django中可以直接通过模式的继承来完成!

一、django中的model定义如下

  1、django定义

from django.db import models

# Create your models here.

class Person(models.Model):
name=models.CharField(max_length=8) class Student(Person):
sid=models.IntegerField()
def sayHello(self):
return "hello my name is {0}".format(self.name)

  2、对应的sql实现

CREATE TABLE `ln_person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(8) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `ln_student` (
`person_ptr_id` int(11) NOT NULL,
`sid` int(11) NOT NULL,
PRIMARY KEY (`person_ptr_id`),
CONSTRAINT `ln_student_person_ptr_id_d756567d_fk_ln_person_id` FOREIGN KEY (`person_ptr_id`) REFERENCES `ln_person` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 可以看出student 并不是包涵person表中的列、而是维护了一个与person表之间
-- 外键关系

二、那么一张表可以同时继承自多张表吗?

  1、测试一个继承自多张表的mode

from django.db import models

# Create your models here.

class Person(models.Model):
name=models.CharField(max_length=8) class Student(models.Model):
sid=models.IntegerField() class Coder(Person,Student):
pass

  2、把变更迁移到mysql

JianglexingdeMacBook-Pro:learning jianglexing$ python3 manage.py makemigrations
SystemCheckError: System check identified some issues: ERRORS:
ln.Coder: (models.E005) The field 'id' from parent model 'ln.person' clashes with the field 'id' from parent model 'ln.student'.

  可以看出来这种写法是不行的、由于person 表与student 表都有id键、所以冲突了;不过由一中给出的例子,表之间的继承在SQL层面看来

  也只不过是一个外键引用而已没什么别的、所以我们也可以通过两个外键引用的方式来完成。

----

django Multi-table inheritance ---- 用于实现基表-子表的更多相关文章

  1. H3BPM子表的复制

    在做一个流程的时候,碰到了下面的表数据直接从上表中获取,并且为不可编辑状态,没有增加和删除行的按钮.一开始使用的是ComputationRule属性,但是有一项是日期空间,没有这个属性,不知道怎么处理 ...

  2. django外键以及主表和子表的相互查询

    Django的外键使用 from django.db import models # Create your models here. class Category(models.Model): na ...

  3. bootstrap table 主子表 局部数据刷新(刷新子表)

    1.主表中设置data-detail-view="true",启用主子表模式: <table class="table table-striped" wi ...

  4. [django]主次表如何取出对方数据[主表obj.子表__set()]

    [sql]mysql管理手头手册,多对多sql逻辑 国家--城市例子 class Country(models.Model): name = models.CharField(max_length=3 ...

  5. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  6. Django之模型层第二篇:多表操作

    Django之模型层第二篇:多表操作 一 表关系回顾 ​ 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. ​ 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息 ...

  7. jeecg3.8在子表页面中使用WebUploader组件

    bcAbout-update.jsp改动如下: 因为默认子表的上传组件不能回显,所以改造成WebUploader 1.在更新页面注销掉生成代码 <%--<script type=" ...

  8. 【翻译】Flink Table Api & SQL —Streaming 概念 —— 时态表

    本文翻译自官网: Temporal Tables https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/strea ...

  9. Maximo子表中增加附件功能

    附件功能的实现(详见ewell.webclient.beans.warranty.WarrantysDateBean ,ewell.webclient.beans.doclinks.custom.Ad ...

随机推荐

  1. 不要用cudnn7.2,用7.3可以兼容

    tensorflow1.11.0 非常的过分了[捂脸]官网上写的cuda 9.0,cudnn 7.2.然而Nvidia官网上根本没有这两个的对应...之前一直都依赖anaconda的一键安装,被惯坏了 ...

  2. Spring核心之IoC——依赖注入

    在J2EE开发平台中,Spring是一种优秀的轻量级企业应用解决方案.Spring倡导一切从实际出发,它的核心技术就是IOC(控制反转)和AOP(面向切面编程)技术.本文用的Spring版本为spri ...

  3. iOS: FFmpeg的使用一

    现状:现在视频直播非常的火,所以在视频直播开发中,使用的对视频进行遍解码的框架显得尤为重要了,其实,这种框架蛮多的,这次主要介绍一下FFmpeg视频播放器的集成和使用,FFmpeg是视频编解码的利器. ...

  4. 数学图形(1.28) EPI线

    貌似由双曲线组成的图形.有时会像个自行车的轮子. 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 #http://www.m ...

  5. Quadro P5200 - 最强大的移动工作站显卡 专门为了惠普 VR Z 背包电脑而发布

    https://www.leiphone.com/news/201708/Z1MCetuoobEaHIqa.html 前言 在今年的计算机图形技术顶会 SIGGRAPH,英伟达并不是在单纯地展示自家的 ...

  6. Unity3D 浅谈被忽略的Quality [转]

    开始分享之前,我先墨迹几句... 最近在工作上,在交流群中,都会遇到一些问题.比如: 为什么打包Android Apk以后,图片变模糊了? 为什么移动端的阴影和电脑端不一样? 我的电脑明明配置很好,为 ...

  7. tomcat(5)servlet容器

    [0]README 0.0)本文部分文字描写叙述转自:"深入剖析tomcat",旨在学习 tomcat(5)servlet容器 的基础知识. 0.1)intro to servle ...

  8. 【笔记】让360浏览器用chrome 内核渲染你的网页

    学校的项目还处在测试阶段 有一个痛点就是有一些页面在360浏览器中默认以ie 内核渲染 这样很不好 以为部分页面因技术方面的不足导致并不能很好地兼容ie 浏览器,于是在网上找了一下答案 可真还有解决方 ...

  9. SPOJ 8222 NSUBSTR(SAM)

    这几天看了N多论文研究了下后缀自己主动机.刚開始蛋疼的看着极短的代码和clj的论文硬是看不懂,后来结合其它几篇论文研究了下.总算是明确了一些 推荐文章http://blog.sina.com.cn/s ...

  10. URL转发

    原理:iframe 代码: <?php if($_SERVER['HTTP_HOST']=="i.mansions.com.cn"){ $html = <<< ...