温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

django orm 关联表查询

发布时间:2020-06-25 05:27:42 来源:网络 阅读:5496 作者:weidabao123 栏目:开发技术

django orm 关联表数据,即sql的多表查询

例如两个表:

Apply表中定义了字段positionforeignkey指向job表的id字段

1.通过父表job查找子表apply中的字段:

    job.objects.values( 'id', 'job_type', 'apply__date_created'

 apply__date_created  表示查找Apply表中的date_created字段,通过父表查找子表就是反向查找,反向查找字段的表示方法:小写的子表tablename+双下线+子表字段名

后台的SQL

  SELECT `job`.`id`, `job`.`job_type`, `apply`.`date_created` FROM`job` LEFT OUTER JOIN `apply` ON ( `job`.`id` = `apply`.`position_id` )


2.filter方法筛选子表字段:

Job.objects.filter(apply__name=’zhang’).values( 'id', 'job_type', 'apply__date_created')

 后台的SQL

SELECT `job`.`id`, `job`.`job_type`,`apply`.`date_created` FROM `job` LEFT OUTER JOIN `apply` ON ( `job`.`id` =`apply`.`position_id` ) where apply.name=’zhang’


3.再加一个user表,定义jobuser字段foreignkey指向user表的id字段,通过表job查询user表的其他字段,即三表查询

Job.objects.filter(apply__name=’zhang’).values( 'id', 'job_type', 'apply__date_created','user__address’)

user__address 表示查找父表user的address字段数据,通过子表查找父表就是正向查找,表示方法为: 外键字段名+双下划线+主表字段名

后台的SQL

SELECT `job`.`id`,`job`.`job_type`, `apply`.`date_created`user.address FROM `job` inner JOIN `apply` ON (`job`.`id` = `apply`.`position_id` )  inner  JOINuser on job.user=user.id  where  apply.name=’zhang’


4.如果子表apply的foreignkey定义的时候指定了related_name='fk_apply_job',那么主表job反向查找子表apply字段数据的语句必须使用related_name替代:  

job.objects.values( 'id''job_type''fk_apply_job__date_created'

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI