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网络编程学习笔记(六):Web客户端访问
Jun 09 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
基于python神经卷积网络的人脸识别
May 24 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
python对于requests的封装方法详解
Jan 03 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
Django model select的多种用法详解
Jul 16 Python
pytorch 归一化与反归一化实例
Dec 31 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 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
Zerg剧情介绍
2020/03/14 星际争霸
PHP开发微信支付的代码分享
2014/05/25 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python assert语句的简单使用示例
2019/07/28 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
毕业班班主任工作总结2015
2015/07/23 职场文书
社区结对共建协议书
2016/03/23 职场文书
工作建议书范文
2019/07/08 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL