[Django-04]一对一,一对多

关系互相查询

    • 参数
    • 一对一 查询
    • 一对多 查询

参数

OneToOneField(),ForeignKey() 的参数如下

  1. to 要连接的模型
  2. to_field 要被关联的目标Model的字段
  3. on_delete 删除主表(被关联的表,也就是非OneToOneField,ForeignKey的表)时,当前表怎么处理。
    CASCADE->联动删除
    PROTECT ->抛出异常
    SET_NULL->设为null
    SET_DEFAULT->设为预定义的默认值
    SET->设置为指定的值
    DO_NOTHIND ->什么也不做
class Grade(models.Model):id = models.AutoField(verbose_name='自增id', name="id", primary_key=True)grade_name = models.CharField(verbose_name="班级名称", name="grade_name", max_length=200)# grade_name = models.CharField(verbose_name="班级名称", db_column="grade_name", max_length=200)create_time = models.DateTimeField(verbose_name='创建时间',name="create_time", auto_now_add=True)  # 第一次赋值update_time = models.DateTimeField(verbose_name='最后一次更新时间',name="update_time", auto_now=True)  # 第二次赋值class Meta:db_table = "app_grade"ordering=["-update_time","create_time"]class GradeManager(models.Model):"""一对一"""id = models.AutoField(verbose_name='自增id', name="id", primary_key=True)manager_name = models.CharField(verbose_name="班主任名称", db_column="manager_name", max_length=200,default=None)create_time = models.DateTimeField(verbose_name='创建时间',db_column="create_time", auto_now_add=True)  # 第一次赋值update_time = models.DateTimeField(verbose_name='最后一次更新时间',db_column="update_time", auto_now=True)  # 第二次赋值# 下面会在数据库中生成grade_id字段grade=models.OneToOneField(verbose_name='班主任表', to=Grade,on_delete=models.CASCADE)class Meta:db_table = "app_grade_manager"ordering=["-update_time","create_time"]class Student(models.Model):"""一对多to: 关联的父 类to_filed:外键要放在 多表中删除父表数据时,当前表与关联表的filed的行为。ForeignKey->字段名称会自动拼接id, 因此对应的序列化对象要加上id"""id = models.AutoField(verbose_name='自增id', name="id", primary_key=True)name = models.CharField(verbose_name='名字', name='name', max_length=200)address = models.JSONField(verbose_name="地址信息", name="address")create_time = models.DateTimeField(verbose_name='创建时间', name='create_time', auto_now_add=True)  # 第一次赋值update_time = models.DateTimeField(verbose_name='最后一次更新时间', name='update_time', auto_now=True)  # 第二次赋值# 下面会在数据库生成grade_id字段grade = models.ForeignKey(verbose_name="关联外键", name="grade", to=Grade, on_delete=models.CASCADE)class Meta:db_table = "app_student"ordering=["-update_time","create_time"]

一对一 查询

grade = Grade.objects.get(id=3)
print(grade.grademanager.manager_name) # 反向通过model小写名称引用
gradeManager = GradeManager.objects.get(id=1)
print(gradeManager.grade.grade_name) # 正向直接通过属性grade引用

一对多 查询

**************************************** 一,找到 “多” ************************************************

grade = Grade.objects.get(id=3)
for student in grade.student_set.all():print(student.name)

*************************************** 多,找到"" ************************************************

s = Student.objects.()
# 这种写法(s.grade)会查一次数据库print(s.grade.grade_name)下面是优化的写法:
s = Student.objects.select_related("grade").all() #这种写法会用inner joinprint(s.grade.grade_name)
意思是,将id=3的student拿到,同事将grade用 innor join同步查出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Verilog] Verilog 简介

主页: 元存储的博客 全文 2100 字。 文章目录 前言1. Verilog 简介2. 主要特性3. 应用领域总结 前言 Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建…

Android Spinner监听列表展开和收起状态

Spinner只提供展开的监听,并未提供收起的监听 有时候需要监听Spinner列表的收起,比如根据展开收起的状态,改变右边显示的arrow图标的方向 我们可以通过自定义Spinner来监听列表的展开和收起 自定义Spinner public class CustomSpinner ex…

input(1:m,:)‘含义

1.矩阵A第一列的转置矩阵。(x,y)表示二维矩阵第x行第y列位置的元素,x为:则表示所有的行。因此,A(:,1)就表示A的第1列的所有元素,这是一个列向量。 所以这里input(1:m,:)表示1到m行,所有列,而后面有个这代表转置&#…

AtCoder Beginner Contest 333 题解 A-E

目录 A - Three ThreesB - PentagonC - Repunit TrioD - Erase LeavesE - Takahashi Quest A - Three Threes 原题链接 题目描述 讲一个数字n输出n次。 public static void solve() throws IOException {int n readInt();printWriter.println(String.valueOf(n).repeat(n)); …

杰理-音箱-flash配置

杰理-音箱-flash配置 注意配置io,双线或者4线的硬件连接方式,否则无法烧录UI资源

哈希扩展:位图与布隆过滤器

目录 1. 位图1.1 位图引入1.2 位图概念1.3 位图的模拟实现1.4 位图相关问题1.5 位图的应用 2. 布隆过滤器2.1 布隆过滤器概念2.2 模拟实现2.3 布隆过滤器相关问题2.3.1 哈希切分 1. 位图 1.1 位图引入 给40亿个不重复的无符号整数,没排过序。给一个无符号整数&…

tp连接数据库

ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。采用PDO方式,目前包含了Mysql…

LabVIEW开发地铁运行安全监控系统

LabVIEW开发地铁运行安全监控系统 最近昌平线发生的故障事件引起了广泛关注,暴露了现有地铁运行监控系统在应对突发情况方面的不足。为了提高地铁系统的运行安全性,并防止类似事件再次发生,提出了一套全面的地铁运行安全监控系统方案。此方案…

MySQL数据库,变量、流程控制与游标

变量 系统变量 系统变量分为全局系统变量(需要添加global关键字)以及会话系统变量(需要添加session关键字)有时将全局系统变量简称为全局变量,将会话系统变量称为local变量。如果不写,默认会话级别。静态…

如何在页面中加入百度地图

官方文档&#xff1a;jspopularGL | 百度地图API SDK (baidu.com) 添加一下代码就可以实现 <!DOCTYPE html> <html> <head><meta name"viewport" content"initial-scale1.0, user-scalableno"/><meta http-equiv"Conten…

超分辨率重建——SAN训练自己数据集及推理测试(详细图文教程)

目录 一、源码包下载二、数据集准备三、预训练权重文件四、训练环境五、训练5.1 超参数修改5.2 训练模型5.2.1 命令方式训练5.2.2 Configuration配置参数方式训练 5.3 模型保存 六、推理测试6.1 超参数修改6.2 测试6.2.1 命令方式测试6.2.2 Configuration配置参数方式测试 6.3 …

响应者链概述

响应者链 iOS事件的3大类型 Touch Events(触摸事件)Motion Events(运动事件&#xff0c;比如重力感应和摇一摇等)Remote Events(远程事件&#xff0c;比如用耳机上得按键来控制手机) 触摸事件 处理触摸事件的两个步骤 寻找事件的最佳响应者事件的响应在响应链中的传递 寻…

Web UI 自动化 元素定位利器

序 元素定位&#xff0c;对于 Web UI 自动化而言&#xff0c;绝对是大家成长道路上的一道绊脚石。 很多初学者&#xff0c;都“死”在了元素定位上&#xff0c;从而失去了学习的兴趣。导致职业规划不得不半途而废~ 那么&#xff0c;今天&#xff0c;我们就使用 Katalon Stu…

深入理解CI/CD与Docker集成:自动化构建和部署的完整指南

在当今软件开发的快节奏环境中&#xff0c;自动化构建和部署是实现敏捷开发和DevOps实践的关键。Docker容器技术为这一过程引入了更高的灵活性和一致性。本文将深入研究如何将持续集成/持续部署&#xff08;CI/CD&#xff09;与Docker集成&#xff0c;提供更详细、实用的示例代…

向华为学习:基于BLM模型的战略规划研讨会实操的详细说明,含研讨表单(二)

上一篇文章&#xff0c;华研荟结合自己的经验和实践&#xff0c;详细介绍了基于BLM模型的战略规划研讨会的设计和组织流程&#xff0c;提高效率的做法。有朋友和我私信沟通说&#xff0c;其实这个流程不单单适合于BLM模型的战略规划研讨会&#xff0c;实际上&#xff0c;使用其…

v851s ssh搭建与使用

ssh 概述: 1. 用来远程登录的一种安全通道协议(常用于linux 、UNIX中); 2. 分为服务端和客户端: 1)服务端即openSSH ,一般属于目标开发板(linux中配置文件路径/etc/ssh/sshd_config); 2)客户端即登录端,常用工具:sercureCRT 、MobaXterm 、Putty等; 1. ssh 服务…

解锁数据探索新时代,JetBrains DataGrip 2023 Mac/win中文版下载

JetBrains DataGrip 2023 Mac/win&#xff0c;作为一款全新的数据库管理和开发工具&#xff0c;为数据工程师、分析师和开发人员提供了强大的功能和工具&#xff0c;帮助他们更高效地处理和分析数据。无论你是使用Mac还是Windows系统&#xff0c;都能够通过这款软件轻松驾驭数据…

springMVC 学习总结(四) 拦截器及统一异常处理

一.拦截器 1.拦截器与过滤器的区别 拦截器 Interceptor 和 过滤器 Filter类似&#xff0c;主要用于拦截用户请求并作出一定处理操作&#xff0c; 但两则也有不同之处&#xff0c;如过滤器只在Servlet前后起作用&#xff0c;是Servlet规范定义的&#xff0c;是Servlt容器才支…

CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?

CTF&#xff08;Capture The Flag&#xff09;是一种网络安全竞赛&#xff0c;它模拟了各种信息安全场景&#xff0c;旨在提升参与者的网络安全技能。CTF 赛事通常包含多种类型的挑战&#xff0c;如密码学、逆向工程、网络攻防、Web 安全、二进制利用等。 发展史 CTF 的概念…

SpringBoot中处理处理国际化

SpringBoot中处理处理国际化 1. 创建SpringBoot项目2. resource下创建i18n目录3. 右键i18n新建资源包4. 弹框中添加需要支持的国际化语言5. messages.properties中添加需要国际化的键6. application.yaml添加配置7. 国际化工具8. 使用功能9 场景问题 1. 创建SpringBoot项目 2.…