【服務后端】Django的多表數據查詢


一、多表查詢

有數據表class和ClassUserTemp表

image

 

image

 

需求是要篩選出某個用戶lUser管理的班級下ClassUserTemp的所有數據。

Class表的Owner字段表示關聯的管理員用戶。

只需要使用__關聯屬性即可,條件路徑就是 班級  --> 班級的管理員  --> 與用戶比較

pUserClasses = ClassUserTemp.objects.filter(idClass__Owner=lUser)

 

二、外鍵查詢

需求改變一下,要查詢某個用戶在ClassUserTemp的記錄,對應的班級

梳理一下,條件路徑,ClassUserTemp的該用戶的記錄idUser=lUser即可。

但返回的Class的objects,此時用ClassUserTemp的外鍵fkClassUserTemp2Class連接Class和ClassUserTemp表

Class.objects.filter(fkClassUserTemp2Class__idUser=lUser)

 

 

附錄:

values篩選

一個表返回查詢結果,可能只是篩選部分字段給用戶,這時候就可以在查詢結果集上用values方法

用戶表結構部分截圖

image

 

定義User表可見字段

image

 

查詢結果集處理如下,值得注意的是 “|”表示合並合集

lUser = User.objects.filter(PhoneNumber=pKey) | User.objects.filter(UserName__contains=pKey)
lUser = lUser.distinct().values(*GlobalVar.TableFields.Userfields)

 

QuerySet其他字段含義

filter表示=,exclude表示!=。
querySet.distinct() 去重復
__exact 精確等於 like 'aaa'
__iexact 精確等於 忽略大小寫 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小寫 ilike '%aaa%',但是對於sqlite來說,contains的作用效果等同於icontains。
__gt 大於
__gte 大於等於
__lt 小於
__lte 小於等於
__in 存在於一個list范圍內
__startswith 以...開頭
__istartswith 以...開頭 忽略大小寫
__endswith 以...結尾
__iendswith 以...結尾,忽略大小寫
__range 在...范圍內
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM