Django框架

(十二)模型表关系的实现

前言准备

在数据库中,我们知道很多表之间是有着关联的,也就是我们常说的一对一,多对多,一对多.所以我们需要使用到外键,对于多对多的表,我们还需要考虑到中间表
不过django简化了我们的操作,我们只需要记住他的方法可以了

举例说明

比如我们有几个代表了学生,学院,学生详情,课程信息的表,他们具有这样的关系,我们该如何在django中实现呢

代码实现

准备:级联删除的条件

常用的三种:

  • CASCADE
  • PROTECT
  • SET_NULL

实现:我们新建一个app来存放这几张表

进入models.py
注:一对多外键的写法 department = models.ForeignKey('Department', on_delete=models.CASCADE)
这里需要加上级联删除的选项models.CASCADE
而多对多的表中我们不需要添加级联删除的选项,而且它可以写在Student中,也可以写在Course中(存在多对多关系的两表中的任一一个)

from django.db import models# Create your models here.
class Department(models.Model):# 学院表d_id = models.AutoField(primary_key=True)d_name = models.CharField(max_length=30)def __str__(self):return f'Department:d_id:{self.d_id},d_name{self.d_name}'class Student(models.Model):# 学生表s_id = models.AutoField(primary_key=True)s_name = models.CharField(max_length=30)department = models.ForeignKey('Department', on_delete=models.CASCADE)course = models.ManyToManyField('Course') # 没有级联删除的选项def __str__(self):return f'Student:s_id:{self.s_id},s_name:{self.s_name}'class Stu_detail(models.Model):# 学生详情表s_id = models.OneToOneField('Student', on_delete=models.CASCADE)s_age = models.IntegerField()def __str__(self):return f'Stu_detail:s_id:{self.s_id},s_age:{self.s_age}'class Course(models.Model):# 课程表 (需要通过中间表来关联,这里的中间表会自动生成)c_id = models.AutoField(primary_key=True)c_name = models.CharField(max_length=30)def __str__(self):return f'Course:c_id:{self.c_id},c_name:{self.c_name}'

观察结果

执行隐射操作之后
我们可以发现新生成了五张表,而我们在model中只写了四张表

这个新多出来的db_dom_student_course表是什么情况呢,我们来看看

这就是django自动为我们多对多关系表生成的中间表

插入数据

>>>from db_dom.models import Department,Student,Stu_detail,Course
>>>Department.objects.create(d_name='潭州教育')
<Department: Department:d_id:1,d_name潭州教育>
>>>Department.objects.create(d_name='温州大学')
<Department: Department:d_id:2,d_name温州大学>
>>>Department.objects.create(d_name='杭州师范大学')
<Department: Department:d_id:3,d_name杭州师范大学>
>>>Department.objects.create(d_name='东北财经大学')
<Department: Department:d_id:4,d_name东北财经大学>
>>>Student.objects.create(s_name='苏尘',department_id=1)
<Student: Student:s_id:1,s_name:苏尘>
from db_dom.models import Department,Student,Stu_detail,Course
Student.objects.create(s_name='tty',department_id=2)
<Student: Student:s_id:2,s_name:tty>
Student.objects.create(s_name='zqq',department_id=3)
<Student: Student:s_id:3,s_name:zqq>
Student.objects.create(s_name='lx',department_id=4)
<Student: Student:s_id:4,s_name:lx>
Student.objects.create(s_name='小明',department_id=1)
<Student: Student:s_id:5,s_name:小明>
Student.objects.create(s_name='小红',department_id=1)
<Student: Student:s_id:6,s_name:小红>
Student.objects.create(s_name='小黑',department_id=1)
<Student: Student:s_id:7,s_name:小黑>
Student.objects.create(s_name='熊大',department_id=2)
<Student: Student:s_id:8,s_name:熊大>
Student.objects.create(s_name='熊二',department_id=2)
<Student: Student:s_id:9,s_name:熊二>
Student.objects.create(s_name='光头强',department_id=2)
<Student: Student:s_id:10,s_name:光头强>
Student.objects.create(s_name='东华帝君',department_id=3)
<Student: Student:s_id:11,s_name:东华帝君>
Student.objects.create(s_name='凤九',department_id=3)
<Student: Student:s_id:12,s_name:凤九>
Student.objects.create(s_name='折颜',department_id=3)
<Student: Student:s_id:13,s_name:折颜>
Student.objects.create(s_name='连宋',department_id=3)
<Student: Student:s_id:14,s_name:连宋>
Student.objects.create(s_name='王凯',department_id=4)
<Student: Student:s_id:15,s_name:王凯>
Student.objects.create(s_name='梅长苏',department_id=4)
<Student: Student:s_id:16,s_name:梅长苏>
Student.objects.create(s_name='霓凰',department_id=4)
<Student: Student:s_id:17,s_name:霓凰>
Stu_detail.objects.create(s_age=19,s_id_id=1)
<Stu_detail: Stu_detail:s_id:Student:s_id:1,s_name:苏尘,s_age:19>
Stu_detail.objects.create(s_age=19,s_id_id=2)
<Stu_detail: Stu_detail:s_id:Student:s_id:2,s_name:tty,s_age:19>
Stu_detail.objects.create(s_age=19,s_id_id=3)
<Stu_detail: Stu_detail:s_id:Student:s_id:3,s_name:zqq,s_age:19>
Stu_detail.objects.create(s_age=19,s_id_id=4)
<Stu_detail: Stu_detail:s_id:Student:s_id:4,s_name:lx,s_age:19>
Stu_detail.objects.create(s_age=25,s_id_id=5)
<Stu_detail: Stu_detail:s_id:Student:s_id:5,s_name:小明,s_age:25>
Stu_detail.objects.create(s_age=20,s_id_id=6)
<Stu_detail: Stu_detail:s_id:Student:s_id:6,s_name:小红,s_age:20>
Stu_detail.objects.create(s_age=23,s_id_id=7)
<Stu_detail: Stu_detail:s_id:Student:s_id:7,s_name:小黑,s_age:23>
Stu_detail.objects.create(s_age=5,s_id_id=8)
<Stu_detail: Stu_detail:s_id:Student:s_id:8,s_name:熊大,s_age:5>
Stu_detail.objects.create(s_age=3,s_id_id=9)
<Stu_detail: Stu_detail:s_id:Student:s_id:9,s_name:熊二,s_age:3>
Stu_detail.objects.create(s_age=8,s_id_id=10)
<Stu_detail: Stu_detail:s_id:Student:s_id:10,s_name:光头强,s_age:8>
Stu_detail.objects.create(s_age=1000,s_id_id=11)
<Stu_detail: Stu_detail:s_id:Student:s_id:11,s_name:东华帝君,s_age:1000>
Stu_detail.objects.create(s_age=10,s_id_id=12)
<Stu_detail: Stu_detail:s_id:Student:s_id:12,s_name:凤九,s_age:10>
Stu_detail.objects.create(s_age=600,s_id_id=13)
<Stu_detail: Stu_detail:s_id:Student:s_id:13,s_name:折颜,s_age:600>
Stu_detail.objects.create(s_age=500,s_id_id=14)
<Stu_detail: Stu_detail:s_id:Student:s_id:14,s_name:连宋,s_age:500>
Stu_detail.objects.create(s_age=30,s_id_id=15)
<Stu_detail: Stu_detail:s_id:Student:s_id:15,s_name:王凯,s_age:30>
Stu_detail.objects.create(s_age=35,s_id_id=16)
<Stu_detail: Stu_detail:s_id:Student:s_id:16,s_name:梅长苏,s_age:35>
Stu_detail.objects.create(s_age=33,s_id_id=17)
<Stu_detail: Stu_detail:s_id:Student:s_id:17,s_name:霓凰,s_age:33>
Course.objects.create(c_name='python')
<Course: Course:c_id:1,c_name:python>
Course.objects.create(c_name='java')
<Course: Course:c_id:2,c_name:java>
Course.objects.create(c_name='c++')
<Course: Course:c_id:3,c_name:c++>
Course.objects.create(c_name='web前端')
<Course: Course:c_id:4,c_name:web前端>

注意:我们在创建的时候,设置的外键名字是department
但是我们观察表结构

外键名字自动做了更改,所以我们在插入数据的时候要以数据库中的字段名字为基准

Django(十二)模型表关系的实现相关推荐

  1. Lua(十二)——表

    一:创建表 在Lua中,表的创建是通过构造表达式来完成 --最简单的表是{},用来创建一个空表 --也可以像创建字典一下初始化一个表 --也可以像创建数组一样初始化一个表 表的索引可以是数字或字符串: ...

  2. Django删除多对多表关系 :

    删除多对多表关系 : # 删除子表与母表关联关系,让小虎不喜欢任何颜色 # 写法1: child_obj = Child.objects.get(name="apollo") co ...

  3. MySQL笔记——外键约束和表关系(一对一,多对一,多对多)

    一.外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,-[CONSTRAINT ...

  4. 5.Django|模型层--多表关系

    多表操作 文件为 ---->  orm2 数据库表关系之关联字段与外键约束 一对多Bookid title price publish email addr1 php 100 人民出版社 111 ...

  5. Django 之 Models(Models 模型 数据表关系)

    Models 模型 ORM django连接数据库 models类的使用 定义和数据库表映射的类 字段常用参数 数据库的迁移 数据相关操作 查看数据库中的数据 查找数据 添加数据 常见查找方法 数据库 ...

  6. Django基础五之Django模型层(二)多表操作

    Django基础五之Django模型层(二)多表操作 一 创建模型 表和表之间的关系 一对一.多对一.多对多 # 作者表 比较常用的信息放在这个表中 class Author(models.Model ...

  7. Django ORM – 多表实例:Django模型Model的定义+模型间关系

    Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django 为这些数据库提供了统一的调用API. 我们可以根据自己业务需求选择不同的 ...

  8. mysql第三章关系模型_一个MySQL关系模型只有三个关系(二维表)组成。_学小易找答案...

    [判断题]DELETE语句功能是对表中所有记录或满足条件的记录进行批量删除. [填空题]The computer's entire ____ was on a single board. [单选题]下 ...

  9. Django框架(5.django中模型类建立关系和多表关系查询)

    1.建立好模型类: from django.db import models# 设计和模型对应的类,(模型类) # Create your models here.# 一类 # 图书类 class B ...

最新文章

  1. 企业网站优化如何提升网站收录?
  2. Oracle 实例崩溃恢复原理剖析 -- 检查点队列的作用与意义
  3. 羽毛球比赛裁判常用英语术语
  4. 牛客 - 配对(贪心+数学)
  5. 重新抛出异常与异常链
  6. Java引用类型——强引用、软引用、弱引用和虚引用
  7. 一次看过瘾的可视化大屏,网友直呼:真酷炫!比Excel强
  8. 安装ssd后不识别网卡_断桥铝门窗安装后就完了?不!该处理的处理,该检查的还要检查...
  9. 水晶报表从VS2008升级到VS2010 注意事项
  10. 关于编程开发的最小系统学习法
  11. 各大快递公司面单号准确性验证的正则表达式
  12. Android简易天气App
  13. html脱离文档流,css固定定位脱离文档流怎么解决?
  14. 如何创建一个最简单的Windows桌面应用程序 (C++)
  15. facade 门面模式和mediator 调停者
  16. 第一届“多模态自然语言处理研讨会”精彩回顾(免费获取PPT)
  17. smb.php如何使用,win10smb1协议怎么开
  18. 搭建自己的无人值守本地影视点播系统
  19. Android FFmpegMediaMetadataRetriever获取歌曲的作者
  20. Java基础知识学完了,还在看着控制台上输出的结果发呆吗?还不来认识认识GUI编程(初识GUI)

热门文章

  1. 万能RecyclerView分割线扩展
  2. html 设置两个标签的相对距离_HTML 让上下两个DIV之间保持一定距离或没有距离...
  3. 人工智能初学笔记系列(1):基础概念与进化流程
  4. LittleFs文件系统
  5. [4G5G基础学习]:流程 - 4G LTE 核心网的Attach流程
  6. canvas——实现图片验证码(功能实现)
  7. 什么是CVE?常见漏洞和暴露列表概述
  8. cve-2021-22205复现
  9. 某计算机内存容量8GB,按字编址,每个字包括2字节,需要多少根地址线?
  10. 偶然看到的一篇文章中的励志诗