1.正向查询和反向查询:

外键的查询操作:

正向查询:

    # 正向查询
   # 基于对象,跨表查询
book_obj = models.Book.objects.all().first()
ret = book_obj.publisher # 和我这本书关联的出版社对象
print(ret,type(ret))
ret = book_obj.publisher.name # 和我这本书关联的出版社对象的name属性
print(ret,type(ret))

    # 查询id=1的书出版社名称
# 涉及到跨表操作,利用双下划线
# 双下划线就表示跨了一张表
ret = models.Book.objects.filter(id=1).values_list("publisher__name")
print(ret)

反向查询:

    # 反向查询
   # 基于对象查找
publisher_obj = models.Publisher.objects.first()
ret = publisher_obj.book_set.all() #关联外键表小写并加上_set
print(ret)

    # 反向查询
# 基于双下划线
ret = models.Publisher.objects.filter(id=1).values_list("book__title")
print(ret)

  

补充:使用first得到的是对象,不可以.value_list(),使用filter得到的是QuerySet

外键,related_name = "books" 反向查询是用来代替book_set的

注意区分related_name和related_query_name:

 

Django之跨表查询——正反向查询(ForeignKey)的更多相关文章

  1. Django【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

    django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); ...

  2. django之跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  3. Django框架----跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  4. Django之跨表查询——正反向查询(ManyToManyField)

    1.多对多查询:涉及到两张表以上的查询. author_obj = models.Author.objects.first() print(author_obj.name) # 查询金老板写过的书 r ...

  5. django orm跨表查询废话最少最精简版

    在model.py中: class B1(models.Model): u1= models.CharField(max_length=32) #多 class B2(models.Model): f ...

  6. [Django]下拉表单与模型查询

    前言:本文主要针对自定义下拉表单制作,下拉表单的内容是取至于数据库,即动态实现下拉表单 正文: 动态实现下拉表单有两种方法: 一.自己手动写 html 模板中的 <form ...> &l ...

  7. django ORM模型表的一对多、多对多关系、万能双下划线查询

    一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...

  8. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  9. Django 多表、跨表、聚合、分组查询

    前期准备: 创建表 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalFi ...

随机推荐

  1. Delphi 取整函数round、trunc、ceil和floor

    Delphi 取整函数round.trunc.ceil和floor 1.Round(四舍六入五留双)功能说明:对一个实数进行四舍五入.(按照银行家算法)例:var i, j: Integer;begi ...

  2. smarty基础总结

    前提: 1. 部署smarty模板目录: 2. 编写Smarty类的子类,定制好template_dir.compile_dir.config_dir.cache_dir.left_delimiter ...

  3. Hive创建表|数据的导入|数据导出的几种方式

    * Hive创建表的三种方式 1.使用create命令创建一个新表 例如:create table if not exists db_web_data.track_log(字段) partitione ...

  4. CF16E Fish(状压+期望dp)

    [传送门[(https://www.luogu.org/problemnew/show/CF16E) 解题思路 比较简单的状压+期望.设\(f[S]\)表示\(S\)这个状态的期望,转移时挑两条活着的 ...

  5. luoguP4768 [NOI2018]归程

    传送门 kruskal重构树: kruskal合并两个联通块时合并的边一定是联通块中权值最大的边,小于等于这条边的边所能联通的所有点在这个联通块中. 在合并两个联通块的时候新建一个点作为两个联通块代表 ...

  6. NXOpenC#_Training_1(cn)【转载】

  7. 高可用开源方案Heartbeat vs Keepalived

    转:http://www.kuqin.com/shuoit/20140623/340745.html 最近因为项目需要,简单的试用了两款高可用开源方案:Keepalived和Heartbeat.两者都 ...

  8. HDU6181-求解次短路-A*或者dijkstra

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门  原题目描述在最下面.  次短路裸题. 思路:  在dijstra的过程过维护两个数组变量:\(dis1[],dis2[ ...

  9. Dll注入技术之ComRes注入

    DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...

  10. scrt 关闭退格键声音

    options-> session Options -> Terminal -> audio bell (删除勾选) 这样就可以在secureCRT 在出错时不‘滴滴’的响了.