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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
详解如何使用Python编写vim插件
Nov 28 Python
python3 发送任意文件邮件的实例
Jan 23 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
人工神经网络算法知识点总结
Jun 11 Python
python实现串口自动触发工作的示例
Jul 02 Python
pytorch 共享参数的示例
Aug 17 Python
django实现模型字段动态choice的操作
Apr 01 Python
python selenium xpath定位操作
Sep 01 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
jquery移动节点实例
2015/01/14 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
Javascript的比较汇总
2016/07/25 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python 字段拆分详解
2019/12/17 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
教师年终个人自我评价
2013/10/04 职场文书
银行简历自我评价
2014/02/11 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
sql字段解析器的实现示例
2021/06/23 SQL Server
Win11查看设备管理器
2022/04/19 数码科技
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers