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实现单词拼写检查
Apr 25 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
详解python-图像处理(映射变换)
Mar 22 Python
PyTorch中反卷积的用法详解
Dec 30 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
Python底层封装实现方法详解
Jan 22 Python
Python安装whl文件过程图解
Feb 18 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
用Python制作音乐海报
Jan 26 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
php 执行系统命令的方法
2009/07/07 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
python3.6编写的单元测试示例
2019/08/17 Python
python 默认参数相关知识详解
2019/09/18 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
企业门卫岗位职责
2013/12/12 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
承诺书格式
2014/06/03 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
高效课堂教学反思
2016/02/24 职场文书