選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP How To W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Django QuerySet - Filter


QuerySet Filter

filter() 方法用於過濾您的搜尋,並允許您僅返回與搜尋詞匹配的行。

正如我們在上一章中學到的,我們可以像這樣按欄位名進行過濾:

示例

僅返回 firstname 為 'Emil' 的記錄

mydata = Member.objects.filter(firstname='Emil').values()
執行示例 »

在 SQL 中,上述語句會這樣寫:

SELECT * FROM members WHERE firstname = 'Emil';

AND(與)

filter() 方法將引數作為 **kwargs(關鍵字引數),因此您可以透過逗號分隔來過濾多個欄位。

示例

返回 lastname 為 "Refsnes" 且 id 為 2 的記錄

mydata = Member.objects.filter(lastname='Refsnes', id=2).values()
執行示例 »

在 SQL 中,上述語句會這樣寫:

SELECT * FROM members WHERE lastname = 'Refsnes' AND id = 2;

OR(或)

返回 firstname 為 Emil 或 firstname 為 Tobias 的記錄(表示:返回匹配任一查詢的記錄,不一定兩者都匹配)不像上面的 AND 示例那樣容易。

我們可以使用多個 filter() 方法,用管道符 | 分隔。結果將合併到一個模型中。

示例

返回 firstname 為 "Emil" 或 "Tobias" 的記錄

mydata = Member.objects.filter(firstname='Emil').values() | Member.objects.filter(firstname='Tobias').values()
執行示例 »

另一個常用方法是匯入並使用 Q 表示式

示例

返回 firstname 為 "Emil" 或 "Tobias" 的記錄

from django.http import HttpResponse
from django.template import loader
from .models import Member
from django.db.models import Q

def testing(request):
  mydata = Member.objects.filter(Q(firstname='Emil') | Q(firstname='Tobias')).values()
  template = loader.get_template('template.html')
  context = {
    'mymembers': mydata,
  }
  return HttpResponse(template.render(context, request))
執行示例 »

在 SQL 中,上述語句會這樣寫:

SELECT * FROM members WHERE firstname = 'Emil' OR firstname = 'Tobias';

欄位查詢

Django 有自己的指定 SQL 語句和 WHERE 子句的方式。

要在 Django 中進行特定 where 子句,請使用“欄位查詢”。

欄位查詢是代表特定 SQL 關鍵字的關鍵字。

示例

使用 __startswith 關鍵字

.filter(firstname__startswith='L');

與 SQL 語句相同

WHERE firstname LIKE 'L%'

上述語句將返回 firstname 以 'L' 開頭的記錄。

欄位查詢語法

所有欄位查詢關鍵字都必須指定欄位名,後跟兩個(!)下劃線字元,然後是關鍵字。

在我們的 Member 模型中,語句會這樣寫:

示例

返回 firstname 以字母 'L' 開頭的記錄

mydata = Member.objects.filter(firstname__startswith='L').values()
執行示例 »

欄位查詢參考

所有欄位查詢關鍵字列表

關鍵字 描述
包含 包含短語
icontains 與 contains 相同,但忽略大小寫
date 匹配日期
day 匹配日期(月份,1-31)(用於日期)
endswith 以...結尾
iendswith 與 endswith 相同,但忽略大小寫
exact 精確匹配
iexact 與 exact 相同,但忽略大小寫
in 匹配其中一個值
isnull 匹配 NULL 值
gt 大於
gte 大於或等於
hour 匹配小時(用於 datetime)
lt 小於
lte 小於或等於
minute 匹配分鐘(用於 datetime)
month 匹配月份(用於日期)
四分之一 匹配季度(1-4)(用於日期)
range 匹配範圍
regex 匹配正則表示式
iregex 與 regex 相同,但忽略大小寫
second 匹配秒(用於 datetime)
startswith 以...開頭
istartswith 與 startswith 相同,但忽略大小寫
time 匹配時間(用於 datetime)
week 匹配週數(1-53)(用於日期)
week_day 匹配星期幾(1-7),1 為星期日
iso_week_day 匹配 ISO 8601 星期幾(1-7),1 為星期一
year 匹配年份(用於日期)
iso_year 匹配 ISO 8601 年份(用於日期)


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援