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 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
Python解析、提取url关键字的实例详解
Dec 17 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
详解Python3序列赋值、序列解包
May 14 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
Python Unittest原理及基本使用方法
Nov 06 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 Python
python 实现图片特效处理
Apr 03 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
sae使用smarty模板的方法
2013/12/17 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题