首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django之ForeignKey和ManyToManyField多表查询

多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案....ForeignKey.related_name 这个名称用于让关联的对象反查到源对象. 如果你不想让Django 创建一个反向关联,请设置related_name 为 '+' 或者以'+' 结尾....提供了一种使用双下划线__的查询语法: >>> Entry.objects.filter(blog__name='Beatles Blog') 反向查询 被索引的关系模型可以访问所有参照它的模型的实例,...反向查询: >>>a = Person.objects.get(id=1) >>>a.group_set.all() 同样related_name可以设置反向查询集的名称。...文档-模型字段-关联字段 django文档 - 执行查询 - 关联的对象 django文档 - 执行查询 - 跨关联关系查询

1.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python测试开发django-37.外键(ForeignKey)查询

    前言 前面在admin后台页面通过设置外键,可以选择下拉框的选项,本篇主要讲解关于外键(ForeignKey)的查询 models设计 在上一篇的基础上新增一个BankName表,Card表通过外键关联到...cardxx.bank_info >>> cardxx.bank_info.bank_name '上海银行' >>> cardxx.bank_info.city '上海' >>> 反向查询...反向查询,当ForeignKey没设置related_name参数,默认是通过关联表的名称加_set去查询 查询结果是QuerySet集合对象 count()函数统计查询个数 [0].card_id 下标取值...,获取对应属性 >>> bank = BankName.objects.get(bank_name='上海银行') >>> bank.city '上海' # 反向查询,表名称_set >>> bank.card_set.all...>>> c.grade.nub '黄金会员' >>> c.bank_info.city '北京' >>> 反向查询需要用到related_name参数,如下 # CardGrade表查Card表 >

    1.6K20

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

    之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息 首先我定义了两个模型,一个是老师模型,一个是学生模型,...一个老师对应多个学生,这个算是一个一对多的类型(如下图所示) 那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?...,并获取老师的相关信息 返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息...从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以在定义主表的外键的时候,直接就给外键定义好名称使用related_name 上面的查询主要是通过主表查询子表的信息...下面说一下如何通过子表查询主表的相关信息,也就是查询一个学生所对应的老师的信息 首先需要先获取一个子表的对象,那么就可以通过定义外键时候的那个外键的字段名获取关于主表的信息了

    2K10

    ORM常用字段介绍

    字段参数 to 设置要关联的表 to_field 设置要关联的表的字段 related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。...(to="Classes") 当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all() 当我们在...=32) theclass = models.ForeignKey(to="Classes", related_name="students") 当我们要查询某个班级关联的所有学生(反向查询)时...,我们会这么写: models.Classes.objects.first().students.all() related_query_name 反向查询操作时,使用的连接前缀,用于替换表名。...16) friends = models.ManyToManyField("self", symmetrical=False) 此时,person对象现在就可以使用person_set属性进行反向查询

    2.5K10

    Django之ORM字段和参数

    (to_field='字段名') ---- related_name   反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。...(to="Classes")   当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all()   ...(max_length=32) theclass = models.ForeignKey(to="Classes", related_name="students")   那么,当我们要查询某个班级关联的所有学生...(反向查询)时,我们就可以这么写: models.Classes.objects.first().students.all() ---- related_query_name    反向查询操作时,使用的连接前缀...---- related_query_name 同ForeignKey字段。 ---- symmetrical               仅用于多对多自关联时,指定内部是否创建反向操作的字段。

    2.3K60

    Django ORM 多表操作

    目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加外键) 一对多(外键 ForeignKey) 一对一 (OneToOneFeild) 多对多...(ManyToManyField):在第三张关系表中新增数据 ORM 修改数据 ORM 删除和清空数据 跨表查询 基于对象的跨表查询 基于双下划线的跨表查询 聚合查询 示例 F查询 Q查询 Django...正向:外键字段在哪,去从该表的角度查另外的表,就是正向 反向:从没有外键表去查另外相关联的表,就是反向 口诀: 正向查询按外键字段 反向查询按表名小写 注意: 正向:属性名 反向:小写类名加 _set...反向查询的时候查询的对象可能有多个的情况加__set,查询的对象只有一个的情况不需要加 基于对象的跨表查询 '''子查询思路''' 1、先查出一个对象 2、基于对象正反查 '''基于对象的跨表查询...:反向''' 4.查询东方出版社出版过的书籍 publish = models.Publish.objects.filter(name='东方出版社').first() books =

    1.8K20

    django 模型关系

    多对一关系 多对多关系 一对一关系 多对一 django是使用django.db.models.ForeignKey 定义多对一关系 ForeignKey需要一个位置参数来指定本Model关联的Model...,ForeignKey关联的Model 是"一", ForeignKey所在的Model是"多" 比如汽车和制造商的例子,一辆汽车只能属于一个制造商,但是一个制造商有多辆汽车,这个关系,用Django...(Manufacturer) name = models.CharField(max_length=30) 多对一查询 正向查询( ForeignKey 所在的模型查询关联的模型) car =...Car.objects.get(pk=2) car.manufacturer #返回一条Manufacturer 对象 反向查询( ForeignKey 指向的模型查询ForeignKey 所在的模型)...clear() #从关联的对象集中删除所有的对象 多对多 要实现多对多,就要使用django.db.models.ManyToManyField类,和ForeignKey一样,它也有一个位置参数,用来指定和它关联的

    1.4K30

    Django 系列博客(十三)

    Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数。 ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True。...to 设置要关联的表 to_field 设置要关联的表的字段 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。...to 设置要关联的表 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。...16) friends = models.ManyToManyField("self", symmetrical=False) 此时,person 对象可以使用 person_set 属性进行反向查询...这样创建的第三张表无法使用 set、add、remove、clear方法来管理对多多关系,需要通过第三张表来进行增、删、改,查询一样。

    1.1K30

    Django---ORM操作大全

    return HttpResponse('OK') 连表查询 反向连表查询: 1、通过object的形式反向连表, obj.小写表名_set.all() publish=models.Publish.objects.filter...正向查找:ForeignKey在 UserInfo表中,如果从UserInfo表开始向其他的表进行查询,这个就是正向操作,反之如果从UserType表去查询其他的表这个就是反向操作。...unique_together = [ ('b','g'), 外键反向查找别名(方便反向查找) 在写ForeignKey字段的时候,如果想要在反向查找时不使用默认的...反向查找: 设置了related_query_name 反向查找时就是obj.别名_set.all()保留了_set related_query_name from django.db import models...(Userinfo,related_query_name='b') related_name 反向查找: 设置了relatedname就是 反向查找时就说 obj.别名.all() from django.db

    7K100
    领券