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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python中的字符串查找操作方法总结
Jun 27 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
Python enumerate索引迭代代码解析
Jan 19 Python
浅谈Django的缓存机制
Aug 23 Python
python实现飞机大战微信小游戏
Mar 21 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python+tkinter实现学生管理系统
Aug 20 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
Anaconda的安装与虚拟环境建立
Nov 18 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实现的oracle分页函数实例
2016/01/25 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
JavaScript 实现??打印?理
2007/04/28 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python实现的堆排序算法示例
2018/04/29 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
生产部主管岗位职责
2014/01/06 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
社区居务公开实施方案
2014/03/27 职场文书
工程承诺书怎么写
2014/05/24 职场文书
2014年度考核工作总结
2014/12/24 职场文书
何玥事迹观后感
2015/06/16 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
Nginx的gzip相关介绍
2022/05/11 Servers