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分析nignx访问日志脚本分享
Feb 26 Python
Python中splitlines()方法的使用简介
May 20 Python
python numpy 按行归一化的实例
Jan 21 Python
从0开始的Python学习016异常
Apr 08 Python
python中for循环变量作用域及用法详解
Nov 05 Python
Python实现图片识别加翻译功能
Dec 26 Python
Python常用编译器原理及特点解析
Mar 23 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Python socket如何解析HTTP请求内容
Feb 12 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 八种基本的数据类型小结
2011/06/01 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
jquery操作select大全
2014/04/25 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
django 模版关闭转义方式
2020/05/14 Python
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
在线课程:Skillshare
2019/04/02 全球购物
晚归检讨书
2014/02/19 职场文书
《锄禾》教学反思
2014/04/08 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
结婚典礼主持词
2015/06/29 职场文书
投诉信范文
2015/07/02 职场文书
教师节祝酒词
2015/08/11 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python
MySQL数据库完全卸载的方法
2022/03/03 MySQL
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
redis protocol通信协议及使用详解
2022/07/15 Redis
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js