日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django Models 多条件查询 以及Q/F查询

發布時間:2025/3/21 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django Models 多条件查询 以及Q/F查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Models多條件查詢方法:
    • 1、傳參數
    • 2、傳字典
    • 3、傳Q對象,構造搜索條件
    • 4、Q對象使用實例:
    • F對象
    • Q對象

詳情查看此參考鏈接

Models多條件查詢方法:

1、傳參數

models.UserInfo.objects.filter(id=3,name='alex')

2、傳字典

需要注意的是,傳入字典時,字典前面需要加** ,記為字典

dic = {'id':123,'name':'alex'} models.UserInfo.objects.filter(**dic)

所以我們可以在在捕捉用戶輸入后,將輸入構造成字典,然后將字典當做參數傳入查詢

3、傳Q對象,構造搜索條件

  • a、在 filter() 等函式中關鍵字參數彼此之間都是 “AND” 關系。如果你要執行更復雜的查詢(比如,
    實現篩選條件的 OR 關系),可以使用 Q 對象。
  • b、Q對象包括 AND 關系 和OR 關系
  • c、Q 對象可以用 & 和 | 運算符進行連接。當某個操作連接兩個 Q 對象時,就會產生一個新的等
    價的 Q 對象。

如:下面這段語句就產生了一個 Q ,這是用 “OR” 關系連接

Q(question__startswith='Who') | Q(question__startswith='What')
  • d、每種查詢函式(比如 filter(), exclude(), get()) 除了能接收關鍵字參數以外,也能以位置參數的
    形式接受一個或多個 Q 對象。如果你給查詢函式傳遞了多個 Q 對象,那么它們彼此間都是
    “AND” 關系。例如:
Poll.objects.get( Q(question__startswith='Who'), Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) )
  • e: filter() 等函數 可以接受 Q對象和條件參數,但Q對象必須放在 條件參數前面

4、Q對象使用實例:

  • 首先還是需要導入模塊
from django.db.models import Q
  • 傳入條件進行查詢:
q1 = Q() q1.connector = 'OR' #連接方式 q1.children.append(('id', 1)) q1.children.append(('id', 2)) q1.children.append(('id', 3))models.Tb1.objects.filter(q1)
  • 合并條件進行查詢:
con = Q()q1 = Q() q1.connector = 'OR' q1.children.append(('id', 1)) q1.children.append(('id', 2)) q1.children.append(('id', 3))q2 = Q() q2.connector = 'OR' q2.children.append(('status', '在線'))con.add(q1, 'AND') con.add(q2, 'AND')models.Tb1.objects.filter(con)

F對象

  • 可以使用模型的字段A與字段B進行比較,如果A寫在了等號的左邊,則B出現在等號的右邊,需要通過F對象構造
list.filter(bread__gte=F('bcommet'))
  • django支持對F()對象使用算數運算
list.filter(bread__gte=F('bcommet') * 2)
  • F()對象中還可以寫作“模型類__列名”進行關聯查詢
list.filter(isDelete=F('heroinfo__isDelete'))
  • 對于date/time字段,可與timedelta()進行運算
list.filter(bpub_date__lt=F('bpub_date') + timedelta(days=1))

Q對象

  • 過濾器的方法中關鍵字參數查詢,會合并為And進行
  • 需要進行or查詢,使用Q()對象
  • Q對象(django.db.models.Q)用于封裝一組關鍵字參數,這些關鍵字參數與“比較運算符”中的相同
from django.db.models import Q list.filter(Q(pk_ _lt=6))
  • Q對象可以使用&(and)、|(or)操作符組合起來
  • 當操作符應用在兩個Q對象時,會產生一個新的Q對象
list.filter(pk_ _lt=6).filter(bcommet_ _gt=10) list.filter(Q(pk_ _lt=6) | Q(bcommet_ _gt=10))
  • 使用~(not)操作符在Q對象前表示取反
list.filter(~Q(pk__lt=6))
  • 可以使用&|~結合括號進行分組,構造做生意復雜的Q對象
    -過濾器函數可以傳遞一個或多個Q對象作為位置參數,如果有多個Q對象,這些參數的邏輯為and
  • 過濾器函數可以混合使用Q對象和關鍵字參數,所有參數都將and在一起,Q對象必須位于關鍵字參數的前面

總結

以上是生活随笔為你收集整理的Django Models 多条件查询 以及Q/F查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。