Django Models 多条件查询 以及Q/F查询
生活随笔
收集整理的這篇文章主要介紹了
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” 關系。例如:
- e: filter() 等函數 可以接受 Q對象和條件參數,但Q對象必須放在 條件參數前面
4、Q對象使用實例:
- 首先還是需要導入模塊
- 傳入條件進行查詢:
- 合并條件進行查詢:
F對象
- 可以使用模型的字段A與字段B進行比較,如果A寫在了等號的左邊,則B出現在等號的右邊,需要通過F對象構造
- django支持對F()對象使用算數運算
- F()對象中還可以寫作“模型類__列名”進行關聯查詢
- 對于date/time字段,可與timedelta()進行運算
Q對象
- 過濾器的方法中關鍵字參數查詢,會合并為And進行
- 需要進行or查詢,使用Q()對象
- Q對象(django.db.models.Q)用于封裝一組關鍵字參數,這些關鍵字參數與“比較運算符”中的相同
- Q對象可以使用&(and)、|(or)操作符組合起來
- 當操作符應用在兩個Q對象時,會產生一個新的Q對象
- 使用~(not)操作符在Q對象前表示取反
- 可以使用&|~結合括號進行分組,構造做生意復雜的Q對象
-過濾器函數可以傳遞一個或多個Q對象作為位置參數,如果有多個Q對象,這些參數的邏輯為and - 過濾器函數可以混合使用Q對象和關鍵字參數,所有參數都將and在一起,Q對象必須位于關鍵字參數的前面
總結
以上是生活随笔為你收集整理的Django Models 多条件查询 以及Q/F查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue如何获取当前时间
- 下一篇: 修改数据,如何将原数据带到输入框