假如我們在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文件中,我這裡直接在終端進行調試
- 第一種or查詢方法:queryset_1 | queryset_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>