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中操作列表之list.extend()方法的使用
May 20 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 Python
python安装scipy的步骤解析
Sep 28 Python
Python3 翻转二叉树的实现
Sep 30 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 Python
python实现剪贴板的操作
Jul 01 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脚本加密专家php解密算法
2020/09/13 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
Javascript Math对象
2009/08/13 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
应聘编辑自荐信范文
2014/03/12 职场文书
商铺门前三包责任书
2014/07/25 职场文书
向女朋友道歉的话
2015/01/20 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python