定义Model:

from django.db import models

class Moreinfo(models.Model):

    weight = models.FloatField()
height = models.FloatField() class Detail(models.Model): sex = models.CharField(max_length=20)
age = models.IntegerField()
moreinfo = models.ForeignKey(Moreinfo) class Usr(models.Model): name = models.CharField(max_length=20)
money = models.FloatField()
detail = models.ForeignKey(Detail) class Product(models.Model): name = models.CharField(max_length=20)
price = models.FloatField() class Record(models.Model): buyer = models.ForeignKey(Usr, related_name='+',)
seller = models.ForeignKey(Usr, related_name='+',)
product = models.ForeignKey(Product)
conut = models.IntegerField()

查询语句:

>>> x=Record.objects.filter(Q(seller__detail__age__gt=20)|Q(buyer__detail__age__gt=20))
>>> print(x.query)
SELECT "tt_record"."id", "tt_record"."buyer_id", "tt_record"."seller_id", "tt_record"."product_id", "tt_record"."conut" FROM "tt_record" INNER JOIN "tt_usr" ON ("tt_record"."seller_id" = "tt_usr"."id") INNER JOIN "tt_detail" ON ("tt_usr"."detail_id" = "tt_detail"."id") INNER JOIN "tt_usr" T4 ON ("tt_record"."buyer_id" = T4."id") INNER JOIN "tt_detail" T5 ON (T4."detail_id" = T5."id") WHERE ("tt_detail"."age" > 20 OR T5."age" > 20)

整理如下:

SELECT "tt_record"."id", "tt_record"."buyer_id", "tt_record"."seller_id", "tt_record"."product_id", "tt_record"."conut"
FROM "tt_record"
INNER JOIN "tt_usr" ON ("tt_record"."seller_id" = "tt_usr"."id")
INNER JOIN "tt_detail" ON ("tt_usr"."detail_id" = "tt_detail"."id")
INNER JOIN "tt_usr" T4 ON ("tt_record"."buyer_id" = T4."id")
INNER JOIN "tt_detail" T5 ON (T4."detail_id" = T5."id")
WHERE ("tt_detail"."age" > 20 OR T5."age" > 20)

疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN的更多相关文章

  1. Django中ORM外键和表的关系(Django编程-4)

    外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因此这里我们首先来 ...

  2. django模型中有外键关系的表删除相关设置

    0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author.AuthorDetail两表 author = models.OneToOneField(to='Aut ...

  3. 【Hibernate】无外键多表查询

    无外键多表查询时编写hql,直接使用逗号分隔表,where作为联合查询条件进行查询.查询出来的结果可为两种,List<List<Object>>或者List<Map< ...

  4. oracle查询某张表的外键,并用 truncate 命令有外键的表中的数据

    注:本文来源于<oracle查询某张表的外键(最终解决办法)> 一:几个查询表外键的脚本 select b.table_name, b.column_name from user_cons ...

  5. 主外键多表查询demo

    https://www.cnblogs.com/DragonFire/p/6949767.html mySQL练习-主外键多表查询 MySQL练习-主外键多表查询 练习: 1.建立表关系: 请创建如下 ...

  6. 删除带外键的表【foreign key constraint fails】报错

    title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...

  7. mysql外键与表查询

    目录 自增特性 外键 外键关系 外键创建 外键的约束效果 级联更新级联删除 多对多关系 一对一关系 表查询关键字 select与from where筛选 group by分组 练习 关系练习 查询练习 ...

  8. Django ORM - 001 - 外键表查询主表信息

    开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...

  9. django模型中, 外键字段使用to_filed属性 指定到所关联主表的某个字段

    在django项目的开发过程中,在设计模型时一开始将主键设置成了一个自定义的字段,但是在创建搜索索引时却发现必须要存在一个id的字段,并且为主键(不知道是否是项目一开始就这样配置的原因), 但此时表结 ...

随机推荐

  1. vuex commit保存数据技巧

    vuex 单向数据流,推荐的commit 改变state数据,写起来非常繁琐,因为改数据可能要写很多commit函数. 依据我的理解,单向数据流主要是为了避免数据混乱,便于调试. 说白了,就是一个数据 ...

  2. Html5 监听拦截Android返回键方法详解

    浏览器窗口有一个history对象,用来保存浏览历史. 如果当前窗口先后访问了三个网址,那么history对象就包括三项,history.length属性等于3. history对象提供了一系列方法, ...

  3. ubuntu 添加右键打开方式,无法添加程序打开方式

    最近把工作环境迁移到ubuntu,装了WPS for Linux ,说实话确实是十分良心啊!运行效率奇高,绿色无广告,并且和windows版本无异,感觉就可以抛弃自带的libreoffice了. 但是 ...

  4. 开源协议瞎扯淡,什么是 MIT 协议?[转]

    图片来源:http://ruby-china.org/topics/15979

  5. CSS禁止输入之readonly VS disable

    Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,包括select, radio, checkbox, button ...

  6. [LeetCode] Remove Boxes 移除盒子

    Given several boxes with different colors represented by different positive numbers. You may experie ...

  7. IDEA2017.3.4破解方式

    下载jetbrainsCrack-2.7-release-str.jar包 下载地址: https://files.cnblogs.com/files/xifenglou/JetBrains.zip ...

  8. 计蒜客NOIP2017提高组模拟赛(五)day1-展览

    传送门 发现这题选或不选对状态的优劣程度不会产生影响,如果已经确定了两个数a和b,那么最优的首项和公比也都是唯一确定的, 与对于后面的数x,加进去也好不加进去也好,首项和公比依旧是原来的 于是我们用尺 ...

  9. bzoj 3930: [CQOI2015]选数

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  10. bzoj3156防御准备 斜率优化dp

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2279  Solved: 959[Submit][Status][Discuss ...