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中处理字符串之isdigit()方法的使用
May 18 Python
python创建临时文件夹的方法
Jul 06 Python
在CMD命令行中运行python脚本的方法
May 12 Python
python实现可视化动态CPU性能监控
Jun 21 Python
Django 路由系统URLconf的使用
Oct 11 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python实现图片中文字分割效果
Jul 22 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
python中def是做什么的
Jun 10 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
一文搞懂如何实现Go 超时控制
Mar 30 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
dedecms模板标签代码官方参考
2007/03/17 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
js实现分割上传大文件
2016/03/09 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python判断有效的数独算法示例
2019/02/23 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
Python中的全局变量如何理解
2020/06/04 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
python3中编码获取网页的实例方法
2020/11/16 Python
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
运动会四百米广播稿
2014/01/19 职场文书
企业负责人任命书
2014/06/05 职场文书
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis