博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django Multi-table inheritance ---- 用于实现基表-子表
阅读量:6906 次
发布时间:2019-06-27

本文共 1479 字,大约阅读时间需要 4 分钟。

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

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

 

----

转载地址:http://zbgdl.baihongyu.com/

你可能感兴趣的文章
艾伟_转载:Web网站缓存文件并发问题解决方案
查看>>
iOS LaunchScreen设置启动图片 启动页停留时间
查看>>
android137 360 双击三击事件
查看>>
PHP-002
查看>>
web接口开发与测试
查看>>
谷歌笔试题整理(一)
查看>>
IOS-KVO、KVC
查看>>
Apache服务器常规操作
查看>>
【树莓派】iptables相关配置
查看>>
Gradle
查看>>
入门基础之——flash
查看>>
leetcode - Remove Duplicates from Sorted List II
查看>>
AndroidStudio下gradle的入门介绍与使用
查看>>
ActiveMQ入门实例
查看>>
PyCharm快捷键
查看>>
item.imageInsets =
查看>>
Git 经常使用命令
查看>>
欧几里得算法与扩展欧几里得算法
查看>>
asp.net core中使用log4net
查看>>
经营操作系统的一些思路
查看>>