一、多表查詢
有數據表class和ClassUserTemp表
需求是要篩選出某個用戶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方法
用戶表結構部分截圖
定義User表可見字段
查詢結果集處理如下,值得注意的是 “|”表示合並合集
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




