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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Python之re操作方法(详解)
Jun 14 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
pandas DataFrame索引行列的实现
Jun 04 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
python利用faker库批量生成测试数据
Oct 15 Python
Python字典实现伪切片功能
Oct 28 Python
python 模块导入问题汇总
Feb 01 Python
实例讲解Python中sys.argv[]的用法
Jun 03 Python
python使用shell脚本创建kafka连接器
Apr 29 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
PHP最常用的正则表达式
2017/02/13 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
js图片切换具体实现代码
2016/10/13 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
详细探究Python中的字典容器
2015/04/14 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
四风自我剖析材料
2014/09/30 职场文书
2019 入党申请书范文
2019/07/10 职场文书
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js