Django外键(ForeignKey)操作以及related_name的作用详解


Posted in Python onJuly 29, 2019

之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息

首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示)

Django外键(ForeignKey)操作以及related_name的作用详解  

那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?

首先我们先查询到老师的信息,在这里我们使用python shell 进行演示  ,输入命令python manage.py shell 进入python shell操作界面:

第一步需要做的自然还是需要将我们的模型导入进来,并获取老师的相关信息

Django外键(ForeignKey)操作以及related_name的作用详解

返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息,这个属性的名字就是子表的名称小写加上_set,具体到这个就是student_set,默认返回的是QuerySet,操作如下:

Django外键(ForeignKey)操作以及related_name的作用详解

在这里也会牵涉到另外一个知识点related_name的使用,在models.py使用Foreign定义外键的时候也可以传入一个参数related_name,操作如下:

Django外键(ForeignKey)操作以及related_name的作用详解

执行python manage.py makemigrations 和  python manage.py migrate 

Django外键(ForeignKey)操作以及related_name的作用详解

从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以在定义主表的外键的时候,直接就给外键定义好名称使用related_name

上面的查询主要是通过主表查询子表的信息

下面说一下如何通过子表查询主表的相关信息,也就是查询一个学生所对应的老师的信息

首先需要先获取一个子表的对象,那么就可以通过定义外键时候的那个外键的字段名获取关于主表的信息了

比如我得到了一个student对象,然后我想要得到这个student对象对应的主表teache中的信息的话,就使用  student.teacher 获取,其中这个teacher就是在子表中定义的外键字段,如下:

Django外键(ForeignKey)操作以及related_name的作用详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python标准库之collections包的使用教程
Apr 27 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
python中单下划线_的常见用法总结
Jul 10 Python
Python3中bytes类型转换为str类型
Sep 27 Python
利用python修改json文件的value方法
Dec 31 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
Python如何调用JS文件中的函数
Aug 16 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python中的垃圾回收(GC)机制
Sep 21 Python
python中remove函数的踩坑记录
Jan 04 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 Python
PyQt5使用QTimer实现电子时钟
Jul 29 #Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 #Python
Python将string转换到float的实例方法
Jul 29 #Python
django foreignkey(外键)的实现
Jul 29 #Python
python实现翻转棋游戏(othello)
Jul 29 #Python
Django如何将URL映射到视图
Jul 29 #Python
python3获取当前目录的实现方法
Jul 29 #Python
You might like
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
php表单处理操作
2017/11/16 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
Python快速从注释生成文档的方法
2016/12/26 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python探索之自定义实现线程池
2017/10/27 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
python实现事件驱动
2018/11/21 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
python 多线程中join()的作用
2020/10/29 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
求职意向书
2014/04/01 职场文书
毕业生就业协议书
2014/04/11 职场文书
小学生毕业评语
2014/12/26 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
党员读书活动心得体会
2016/01/14 职场文书