Django 模型类ForeignKey 选项参数

https://blog.csdn.net/hpu_yly_bj/article/details/78939748

to_fields 

被关联字段用于关联的字段,默认情况下,Django使用被关联对象的主键

如果主表的主键有可能发生改变,则需要在外键字段的参数中to_fields指定到被关联主表的一个必传(unique)的某个字段,使其不影响之前的业务逻辑

relate_name

举例:一个人物信息表(PeopleInfo)拥有的字段是models.ForeignKey(Book),则默认会有一个relate_name为"peopleinfo_set"(被关联模型类小写+_set),如果在外键关系里修改了relate_name ,如,model.ForeignKey(Book, relate_name=“person”),则People的对象描述符号就变成了“person”,可以通过book.person 取到所有关联这本书的人物 (未指定之前是通过book.peopleinfo_set)

真正的用处是在一个对象被另一个对象关联不止一次时,这个参数才真正有用

举例:如果一个Story 对象既有frist_category 字段,又又second_category 字段,为确保Category 对象拥有正确的对象描述符,需要指定relate_name

      models.ForeignKey(Category, relate_name="first_story")

      models.ForeignKey(Category, relate_name="second_story")

这样 Category对象才会自动拥有frist_story和second_story 的对象描述符

https://blog.csdn.net/hpu_yly_bj/article/details/78939748

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

之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息

首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示)

那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?

首先我们先查询到老师的信息,在这里我们使用python shell 进行演示  ,输入命令python manage.py shell 进入python shell操作界面:

第一步需要做的自然还是需要将我们的模型导入进来,并获取老师的相关信息

返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息,这个属性的名字就是子表的名称小写加上_set,具体到这个就是student_set,默认返回的是QuerySet,操作如下:

在这里也会牵涉到另外一个知识点related_name的使用,在models.py使用Foreign定义外键的时候也可以传入一个参数related_name,操作如下:

执行python manage.py makemigrations 和  python manage.py migrate

从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以在定义主表的外键的时候,直接就给外键定义好名称使用related_name

上面的查询主要是通过主表查询子表的信息

下面说一下如何通过子表查询主表的相关信息,也就是查询一个学生所对应的老师的信息

首先需要先获取一个子表的对象,那么就可以通过定义外键时候的那个外键的字段名获取关于主表的信息了

比如我得到了一个student对象,然后我想要得到这个student对象对应的主表teache中的信息的话,就使用  student.teacher 获取,其中这个teacher就是在子表中定义的外键字段,如下:

————————————————

版权声明:本文为CSDN博主「lotusgrm」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/hpu_yly_bj/article/details/78939748

(0)

相关推荐

  • python测试开发django-12.主键primary_key

    前言 django的models新增数据库表时,如果不设置主键,会默认新增一个id为主键,如果我们想自己设置一个字段为主键,需加个参数primary_key=True 默认id主键 新增一张用户表,表 ...

  • 第 59 天:Python Django 模型概述与应用

    今天来为大家介绍 Django 框架的模型部分,模型是真实数据的简单明确的描述,它包含了储存的数据所必要的字段和行为,Django 遵循 DRY Principle .它的目标是你只需要定义数据模型, ...

  • python测试开发django-31.admin后台一对多关系

    前言 平常的网页上有很多一对多的场景,比如填写银行卡信息的时候,会从银行列表下拉框选择对应的银行信息.一般会建两张表,一张表放银行的信息,一张表放银行卡信息. 每个银行可以对应多个银行卡,每个银行卡只 ...

  • 模型类文章如何提高临床实用性

    随着医院数据量的增加以及机器学习等算法的兴起.目前有很多基于患者数据来进行模型预测的研究.例如我们之前介绍过的:这个文章 PS:除了这些利用临床数据来构建模型的文章,当然还有一些比如利用高通量测序的数 ...

  • 一些PHP选项参数相关的函数

    一些PHP选项参数相关的函数 关于 PHP 的配置,我们大多数情况下都是去查看 php.ini 文件或者通过命令行来查询某些信息,其实,PHP 的一些内置函数也可以帮助我们去查看或操作这些配置参数.比 ...

  • [PHP小课堂]一些PHP选项参数相关的函数

    [PHP小课堂]一些PHP选项参数相关的函数 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[xiaoyuezigonggong/149844827]免费得PHP.项目管理学习资料 知 ...

  • 模型类文章如何书写?

    昨天我们介绍了一个在线进行机器学习的网站.在这个网站当中,可以对我们的临床数据进行类似于模型预测这样的分析.来寻找更好的临床模型. 在我们分析完之后.之前没没有接触过这类文章,所以不清楚要怎么入手写. ...

  • 微软发布史上最大AI模型:170亿参数,将用于Office套件

    乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI 今天(2月11日),微软发布史上最大语言模型,名为Turing-NLG. 170亿参数量,是此前最大的语言模型英伟达"威震天&qu ...

  • Django级联删除的选项

    https://www.cnblogs.com/zhangqunshi/p/6953915.html Django级联删除的选项 Django模型中的on_delete属性具有如下选项: CASCAD ...

  • 前端教程:Django模型

    创建模型 下面是创建一个 Dreamreal 模型实例 − from django.db import models class Dreamreal(models.Model): website = ...

  • 8类常用场景参数总结,摄影新手如何调快门,光圈,感光度?

    我们常说的调参数,也就是调整光圈.快门.感光度,来控制曝光. 1.调整光圈值 如果想要拍摄出背景虚化的效果,可以用AV光圈优先模式,或者M手动模式,设置光圈F值. 光圈F的数字越小,说明光圈越大,进光 ...