Django外键(ForeignKey)操作以及related_name的作用

Django外键(ForeignKey)操作以及related_name的作用之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息  首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示)      那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?   首先我们先查询到老师的信息,在这里我们使用pyt

大家好,又见面了,我是你们的朋友全栈君。

  之前已经写过一篇关于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的作用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149807.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ucosii操作系统内核源码学习第一篇

    ucosii操作系统内核源码学习第一篇待会就开始学习

  • NB-IoT应用场景_iot框架

    NB-IoT应用场景_iot框架NB-IOT实现万物互联设计思路分享(固定上报类)NB-IOT窄带物联网(NarrowBandInternetofThings,NB-IoT),是一种专为万物互联打造的蜂窝网络连接技术。NB-IOT作为近年大火的一项物联网技术,因为其特性受到了众多行业众多企业的青睐。其广覆盖,大连接,低功耗,低成本的四大主要特点符合众多行业的实现物联网平滑过度的要求,成为了物联网技术又一代宠儿。本人也…

  • BigDecimal.setScale用法总结「建议收藏」

    BigDecimal.setScale用法总结「建议收藏」1. BigDecimalnum1=newBigDecimal(2.225667);//这种写法不允许,会造成精度损失2. BigDecimalnum2=newB

  • Traceroute原理学习

    Traceroute原理学习Traceroute可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。曾经介绍过IP记录路由的选项RR,为什么不使用这个选项而另外开发一个新的应用程序Traceroute呢?原因有三:其一,并不是所有的路由器都支持记录路由这个选项;其二,记录路由一般是单向的选项,发送端设置了该选项,接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端。大多数的ping服

  • eclipse android环境搭建,Eclipse Android开发环境搭建教程

    eclipse android环境搭建,Eclipse Android开发环境搭建教程EclipseAndroid开发环境搭建教程是本文要介绍的内容,主要是来了解并学习EclipseAndroid环境搭建的过程,具体关于EclipseAndroid内容的详解来看本文。EclipseAndroid开发准备:1、javasdk2、eclipsehttp://www.eclipse.org/downloads/3、android-sdk-windows安装好java环境和ecli…

  • java 针对jvm的面试题_24个Jvm面试题总结及答案

    java 针对jvm的面试题_24个Jvm面试题总结及答案1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。2.Java内存结构?方法区和对是所有…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号