django Multi-table inheritance ---- 用于实现基表-子表

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层面看来

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

----

时间: 2024-10-13 23:24:11

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

介绍遍历子表的方法

在表单中,控件类型为子表的数据项,其对于的前台代码其实就是Table 下面简单介绍遍历子表的方法 循环子表取.赋值方法: //此方法的功能是将子表TravelExpensesList复制到子表FinancialAudit中 //步骤解析: //1.取到子表FinancialAudit的总行数 //2.由于是将子表TravelExpensesList复制到子表FinancialAudit中,也就是子表TravelExpensesList是有值的,而子表FinancialAudit是刚初始化的,没有

H3 BPM循环子表相关方法介绍

在表单中,控件类型为子表的数据项,其对于的前台代码其实就是Table 下面简单介绍遍历子表的方法 循环子表取.赋值方法: //此方法的功能是将子表TravelExpensesList复制到子表FinancialAudit中 //步骤解析: //1.取到子表FinancialAudit的总行数 //2.由于是将子表TravelExpensesList复制到子表FinancialAudit中,也就是子表TravelExpensesList是有值的,而子表FinancialAudit是刚初始化的,没有

Table inheritance implementation changed

在AX 2012 R2我们会发现有些table是在AOT里的,但是不存在实际的SQL Database. 例如:CompanyInfo table. 最终通过Extends property,可以发现CompanyInfo table 继承的是DirPartyTable. 1. 为了研究清楚table inheritance是如何工作的,我们可以从一个小小的query开始.     CompanyInfo comp;     select generateOnly forceLiterals c

CSS3可伸缩框属性,可用于等分显示子元素或按比例显示子元素的大小

用法跟Android的android:layout_weight属性类似,可类比Android中的用法,这样比较好记,由于目前所有浏览器都不支持大部分的属性,所以所有的属性都需要加上Firefox.Safari.Opera 以及 Chrome支持替代的-moz-和-webkit-前缀,现在基本上所有的CSS3属性都应该这样做,即每个属性都需要至少设置三个,参考下面的例子. 父容器属性: display:box;当定义了这个属性时,子元素想居中显示时margin:0px auto是无效的,需使用t

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

1.主表中设置data-detail-view="true",启用主子表模式: <table class="table table-striped" width="80%" id="ds_table" align="center" striped="true" data-height="430" data-detail-view="true"

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

Django之模型层第二篇:多表操作 一 表关系回顾 ? 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. ? 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号.姓名.部门名.部门职能描述,此时若公司有1万名员工,但只有3个部门,因为每一名员工后都需要跟着部门信息(部门名.部门职能),所以将会导致部门信息出现大量重复.浪费空间. ? 解决方法就是将数据存放于不同的表中,然后基于foreign key建立表之间的关联关系. ? 细说的

【数据库】主键,外键,主表,从表,关联表,父表,子表

转自:https://www.2cto.com/database/201707/662425.html 一.前言 在数据库设计中,hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用是非常有必要的. 二.概述 下面从数据库设计角度,ORM框架使用(以Hibernate为例),PowerDesigner软件以及实际业务角度进行一下介绍. (1) 数据库角度而言 主键:一般情况下

父表、子表 主外键关系

ORACLE官方文档介绍: Concurrency Control, Indexes, and Foreign Keys You almost always index foreign keys. The only exception is when the matching unique or primary key is never updated or deleted.(你总是需要对 外键添加索引! 唯一的例外就是:匹配的主键列 或是 唯一列 从不进行更新操作或者 删除操作) Oracle

hive中创建子表并插入数据过程初始化MR报错解决方法

本文继成上一篇通过hive分析nginx日志文章,详情参考下面链接: http://www.cnblogs.com/wcwen1990/p/7066230.html 接着来: 创建业务子表: drop table if exists chavin.nginx_access_log_comm; create table if not exists chavin.nginx_access_log_comm( host STRING, time STRING, request STRING, refe