077:【Django資料庫】Q表示式詳解
阿新 • • 發佈:2019-01-10
Q表示式詳解:
如果想要實現所有價格高於100元,並且評分達到9.0以上評分的圖書。那麼可以通過以下程式碼來實現:
books = Book.objects.filter(price__gte=100,rating__gte=9)
以上這個案例是一個並集查詢,可以簡單的通過傳遞多個條件進去來實現。
但是如果想要實現一些複雜的查詢語句,比如要查詢所有價格低於10元,或者是評分低於9分的圖書。那就沒有辦法通過傳遞多個條件進去實現了。這時候就需要使用 Q表示式 來實現了。示例程式碼如下:
from django.db.models import Q books = Book.objects.filter(Q(price__lte=10) | Q(rating__lte=9))
以上是進行或運算,當然還可以進行其他的運算,比如有 & 和 ~(非) 等。一些用 Q 表示式的例子如下:
from django.db.models import Q # 獲取id等於3的圖書 books = Book.objects.filter(Q(id=3)) # 獲取id等於3,或者名字中包含文字"記"的圖書 books = Book.objects.filter(Q(id=3)|Q(name__contains("記"))) # 獲取價格大於100,並且書名中包含"記"的圖書 books = Book.objects.filter(Q(price__gte=100)&Q(name__contains("記"))) # 獲取書名包含“記”,但是id不等於3的圖書 books = Book.objects.filter(Q(name__contains='記') & ~Q(id=3))
例項程式碼截圖: