表结构

from django.db import models

# Create your models here.class Publisher(models.Model):    id = models.AutoField(primary_key=True)    name = models.CharField(max_length=32)

class Book(models.Model):    id = models.AutoField(primary_key=True)    name = models.CharField(max_length=32)

    publisher = models.ForeignKey('Publisher', related_name='person_book', related_query_name='ooxx')

插入数据

# Book表id   title  pubtime          person_id
1    书1    1533225600000    1
2    书2    1533225600000    1
3    书3    1534435200000    1
4    书4    1535644800000    2
5    书5    1535126400000    3

# Publisher表id   name
1    出版社1
2    出版社2
3    出版社3

正向查询: 外键所在表去查另一张表,Book >> Publisher

反向查询:普通表去查外键所在的表,Publisher >> Book

正向查询,基于对象跨表查询

book_obj = models.Book.objects.all()  # 取到书籍对象book_obj.publisher.name   # 书籍的出版社名字,htmlbook_obj.person.id   # 书籍的出版社id,html

跨表查询,利用双下划线跨表查询

models.Book.objects.filter(id=1).values('publisher__name')  # 查询id是1的书的出版社的名字,一条双下划线就是跨一张表models.Book.objects.filter(id=1).values_list('publisher__name')  

反向查询

对象查询  obj.表名_set()

publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
ret = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有数
for i in ret:  # 循环对象print(i.name)  # 打印出每一个书的书名

publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
titles = books.values_list("name")  # 找到第一个出版社出版的所有书的书名print(titles)因为使用了releted_name,就是用person_book代替了表字段名字表字段person = models.ForeignKey(Person, related_name='person_book')所以这一这样写books = publisher_obj.person_book.all()titles = books.values_list('name')print(titles)如果表字段person = models.ForeignKey(Person, related_name='person_book',related_query_name="xxoo")related_query_name="xxoo",这里表示跨表查询xxoo代替表的名字bookbooks = publisher_obj.ooxx_set.all()

基于双下划线

ret = models.Publisher.objects.filter(id=1).values_list('person_book__name')person_book是通过releted_name给对应关系起的名字,通过person_book就找到了关联的表,再通过双下划线找到nameprint(ret)

附带django里面脚本的代码

import osif __name__ == '__main__':# 加载Django项目的配置信息os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目名.settings")# 导入Django,并启动Django项目import djangodjango.setup()from app01 import models# 查询id为1的出版社出版的所有书的nameret = models.Publisher.objects.filter(id=1).values_list('person_book__name')print(ret)

转载于:https://www.cnblogs.com/aaronthon/p/9520832.html

ORM正向和反向查询相关推荐

  1. 10 ORM 多表操作 查询

    1.子查询:基于对象的跨表查询 def query(request):"""跨表查询:1.基于对象查询2.基于双下划线查询3.聚合.分组查询4. F Q 查询" ...

  2. django orm关联查询_django中orm的多表查询

    一.创建模型 下面我们通过图书管理系统,来设计出每张表之间的对应关系. 通过上图关系,来定义一下我们的模型类. from django.db import models class Book(mode ...

  3. django-正向查询与反向查询演练-查询集的三种状态

    模型类 模型类的创建 视图中的数据插入 数据行的插入 查询到全部学生的信息,得到查询集 遍历查询集,得到一个一个学生对象 学生对象.属性 学生对象.外键.字段 关注ut,ut是一个外键关联的字段 学生 ...

  4. django orm querset 多表查询

    一对多 or 一对一 前提条件: name = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="ps&q ...

  5. Windows中的DNS服务——正向解析反向解析配置

    坚信并为之坚持是一切希望的原因. DNS服务是AD域不可或缺的一部分,我们在部署AD域环境时已经搭建了DNS服务(windows server 2008 R2域中的DC部署),但是DNS服务的作用还是 ...

  6. DotNET企业架构应用实践-系统架构与性能-缓存技术与ORM中的缓存查询技术

    系列回顾 在前面的文章DotNET企业架构应用实践-系统架构与性能-理论依据及相关做法一文中我介绍了系统性能优化的理论做了一个概括的介绍,也简单的介绍了性能优化的过程及相关的技术关注点或者说是做法. ...

  7. openresty开发系列2--nginx的简单安装,正向、反向代理及常用命令和信号控制介绍...

    openresty开发系列2--nginx的简单安装,正向.反向代理及常用命令和信号控制介绍 一.nginx的安装下载及编译安装 1.Nginx下载:nginx-1.13.0.tar.gz,下载到:/ ...

  8. django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

    2019独角兽企业重金招聘Python工程师标准>>> 1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.   class A(models.Model):      ...

  9. 知了Excel教你vlookup反向查询,就是这么简单

    vlookup配合if函数实现反向查询 欢迎来到知了Excel函数教学 欢迎来到知了Excel函数教学 vlookup在excel函数中也算是一个大哥级别的函数了,功能非常强大.把vlookup用好可 ...

  10. 【Multisim仿真】二极管加正向和反向电压测量实验

    [Multisim仿真]二极管加正向和反向电压测量实验 本仿真实验基于Multisim14上平台进行的. 实验一:给二极管施加正向电压实验演示 实验说明 先通过键盘按键:A和B键控制J1.J2两个开关 ...

最新文章

  1. C语言学习趣事_之_大数运算_加法
  2. 借助TensorFlow框架,到底能做什么?
  3. 分布式事务与2PC、3PC理论详解
  4. 查漏补缺!这份 VUE 学习知识总结请注意查收! | 原力计划
  5. 应用机器学习(六):决策树
  6. python time sleep 阻塞 异步_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...
  7. 洛谷OJ P3368 【模板】树状数组 2
  8. 银河麒麟系统服务端命令_麒麟系统介绍
  9. linux 设置多网段ip 地址,举例说明Linux不同网段访问的设置办法
  10. 计算机英特尔显卡在哪找,Win10英特尔显卡设置在哪里 英特尔核芯显卡控制面板六大功能详解...
  11. MATLAB图形句柄
  12. 深圳:由“独角兽”们构建起的硬核科技之城
  13. 【Hostapd support for WPA3 R3 Wi-Fi Security】
  14. 如何培养自己积极的心态-思维与习惯影响未来,积极的心态决定了成功的85%
  15. vmware12虚拟机中ubuntu16.04安装搜狗输入法
  16. requireJs快速上手
  17. v1 中兴f450g_上海电信中兴F450G v2.0 改桥接
  18. 【电机控制】六步法驱动BLDC电机,使用硬件COM事件,STM32+CUBEMX(HAL库)配置
  19. Android中常用的设计模式
  20. 公网域名访问内网IP跨域

热门文章

  1. bug管理工具之禅道的测试模块的使用
  2. c#中两种不同的存储过程调用与比较
  3. WebLogic(12C)——windows下安装教程
  4. 技术晨读_20160217
  5. YUI-compressor 在Linux下安装和使用
  6. 教你使用Wine在Linux上运行Windows软件
  7. 【Android每日一讲】2012.11.08 Android 多语系支持 -- Locale与Configuration
  8. 用组策略彻底禁止USB存储设备、光驱、软驱、ZIP软驱
  9. windows 2003与windows 2008区别之AD DS篇
  10. 在Linux环境下安装JDK+JBoss