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 相关文章推荐
python3实现全角和半角字符转换的方法示例
Sep 21 Python
深入理解Django的自定义过滤器
Oct 17 Python
python实现手机通讯录搜索功能
Feb 22 Python
django 发送手机验证码的示例代码
Apr 25 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
余弦相似性计算及python代码实现过程解析
Sep 18 Python
详解python tkinter模块安装过程
Jan 06 Python
matplotlib阶梯图的实现(step())
Mar 02 Python
python tqdm用法及实例详解
Jun 16 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 传值赋值与引用赋值的区别
2010/12/29 PHP
深入php数据采集的详解
2013/06/02 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
PHP的自定义模板引擎
2017/03/24 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
ext 代码生成器
2009/08/07 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
商业街策划方案
2014/05/31 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
如何拟写通知正文?
2019/04/02 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android