如何在Django ORM中進行 or、and、not查詢?

如何在Django ORM中進行 or、and、not查詢?

admin後臺添加的測試用戶

假如我們在django的admin後臺默認添加了如上圖所示的幾個用戶。每個用戶擁有username、first_name、last_name等等幾個字段。

or查詢

在項目開發中我們可能有需求要在兩個或多個條件下執行過濾,那麼他們的過濾關係用中文來講就是'或'的查詢關係,英文成為'or'。假設在本例中你要查找所有以‘編’開頭的first_name和‘謝’開頭的last_name的所有用戶。

Django為我們提供了兩個查詢方法:

  • queryset_1 | queryset_2
  • filter(Q(<condition>)|Q(<condition>))/<condition>/<condition>

來看看,具體的查詢代碼,一般這些查詢代碼在視圖views.py文件中,我這裡直接在終端進行調試

  1. 第一種or查詢方法:queryset_1 | queryset_2
  2. 第二章or查詢方法:filter(Q(<condition>)|Q(<condition>))/<condition>/<condition>
<code># 第二種Q查詢方法 endswith區分大小寫,查詢的是結尾字符 

from django.db.models import Q
qs = User.objects.filter(Q(first_name__endswith='程')|Q(last_name__startswith='謝'))

# 輸出及輸出結果
print(qs)
<queryset>, <user>]>/<user>/<queryset>/<code>

and查詢

and查詢指的是查找與多個條件匹配的查詢集,中文表達是什麼和什麼的關係。假設在本例中你要查找first_name以“霆”,last_name以“謝”開頭的用戶。

Django提供了三個選項:

  • filter(<condition>, <condition>)/<condition>/<condition>
  • queryset_1 & queryset_2
  • filter(Q(<condition>) & Q(<condition>))/<condition>/<condition>

第一種and組合多個條件的默認方式filter

<code>qs1 = User.objects.filter(
       first_name__startswith = '霆',
       last_name__startswith = '謝'
  )
# 輸出及輸出結果
print(qs1)
<queryset>]>/<queryset>/<code>

第二種顯示的在查詢集上使用&運算符。

<code>qs2 = User.objects.filter(
       first_name__startswith = '霆'
  ) & User.objects.filter(
       last_name__startswith = '謝'

  )

# 輸出及輸出結果
print(qs2)
<queryset>]>/<queryset>/<code>

第三種完全可定製的使用Q對象。

<code>from django.db.models import Q
qs3 = User.objects.filter(
Q(first_name__startswith = '霆') &
Q(last_name__startswith = '謝')
  )
# 輸出及輸出結果
print(qs3)
<queryset>]>/<queryset>/<code>

not查詢

以本例來講,假設你要獲取除超級管理員以外的所有用戶,這裡默認的管理員id為1,就需要執行not操作。

Django提供了兩個選項。

  • exclude(<condition>)/<condition>
  • filter(~Q(<condition>))/<condition>

第一種使用默認的exclude排除法。

<code>qs5 = User.objects.exclude(id=1)
# 輸出及輸出結果
print(qs5)
<queryset>, <user>, <user>]>/<user>/<user>/<queryset>/<code>

第二章使用Q()方法

<code>from django.db.models import Q
qs6 = User.objects.filter(~Q(id=1))
# 輸出及輸出結果
print(qs6)
<queryset>, <user>, <user>]>/<user>/<user>/<queryset>/<code>

如果在這裡學到了知識,那麼請關注我或加入圈子一起交流學習,這裡將持續更新關於django的更多好內容。


分享到:


相關文章: