更新時(shí)間:2022-07-19 來源:黑馬程序員 瀏覽量:
之前的查詢都是字段與常量值進(jìn)行比較,如果在查詢過程中需要比較表中的字段,那么可以使用django.db.models中的F對(duì)象;查詢時(shí)可能涉及一個(gè)或多個(gè)查詢條件,此時(shí)可以使用Q對(duì)象。
1.F對(duì)象
使用F對(duì)象的語(yǔ)法格式如下:
F(字段名)
假設(shè)現(xiàn)有模型類BookInfo,該模型類中的字段readount表示閱讀量,字段commentcount表示評(píng)論量,利用F對(duì)象查詢閱讀量大于評(píng)論量的圖書,示例如下:
from django.db.models import F BookInfo.objects.filter(readcount_gt=F('commentcount'))
F對(duì)象支持加、減、乘、除、求余、次方運(yùn)算。例如,查詢閱讀量等于2倍評(píng)論量的圖書。示例如下:
BookInfo.objects.filter(readcount=F('commentcount')*2)
2.Q對(duì)象
使用Q對(duì)象的語(yǔ)法格式如下:
Q(屬性名_運(yùn)算符=值)
例如,查詢閱讀量大于20并且編號(hào)小于3的圖書。示例如下:
BookInfo.objects.filter(readcount___gt=20,id___lt=3)
Q對(duì)象可與邏輯運(yùn)算符“|”和“&”結(jié)合實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)庫(kù)查詢。例如,使用Q對(duì)象查詢閱讀量大于20且編號(hào)小于等于5的圖書。示例如下:
BookInfo.objects.filter(Q(readcount___gt=140)&Q(id___lte=5))
Q對(duì)象還支持取反操作,其格式為“~QQ”。例如,查詢id不等于3的圖書。示例如下:
BookInfo.objects.filter(~Q(id=3))