溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

django orm 關(guān)聯(lián)表查詢

發(fā)布時間:2020-06-25 05:27:42 來源:網(wǎng)絡(luò) 閱讀:5496 作者:weidabao123 欄目:開發(fā)技術(shù)

django orm 關(guān)聯(lián)表數(shù)據(jù),即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字段數(shù)據(jù),通過子表查找父表就是正向查找,表示方法為: 外鍵字段名+雙下劃線+主表字段名

后臺的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字段數(shù)據(jù)的語句必須使用related_name替代:  

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI