W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在類似 ?filter()
? 中,查詢使用的關(guān)鍵字參數(shù)是通過?"AND"
?連接起來的。如果你要執(zhí)行更復(fù)雜的查詢(例如,由 ?OR
? 語句連接的查詢),你可以使用 ?Q
?對象。
?Q
?對象?(django.db.models.Q)
?是一個用于封裝關(guān)鍵字參數(shù)集合的對象。
例如,這個 ?Q
?對象封裝了一個 ?LIKE
?查詢:
from django.db.models import Q
Q(question__startswith='What')
?Q
?對象能通過 & 和 ?|
? 操作符連接起來。當(dāng)操作符被用于兩個 ?Q
?對象之間時會生成一個新的 ?Q
?對象。
例如,該語句生成一個 ?Q
?對象,表示兩個 ?"question_startswith"
? 查詢語句之間的 ?"OR"
? 關(guān)系:
Q(question__startswith='Who') | Q(question__startswith='What')
這等價于以下 SQL ?WHERE
?語句:
WHERE question LIKE 'Who%' OR question LIKE 'What%'
你能通過 ?&
? 和 ?|
? 操作符和括號分組,組合任意復(fù)雜度的語句。當(dāng)然, ?Q
? 對象也可通過 ?~
? 操作符反轉(zhuǎn),允許在組合查詢中組合普通查詢或反向 ?(NOT)
? 查詢:
Q(question__startswith='Who') | ~Q(pub_date__year=2005)
每個接受關(guān)鍵字參數(shù)的查詢函數(shù) (例如 ?filter()
?, ?exclude()
?, ?get()
?) 也同時接受一個或多個 ?Q
?對象作為未命名的參數(shù)。若你為查詢函數(shù)提供了多個 ?Q
?對象參數(shù),這些參數(shù)會通過 ?"AND"
? 連接。例如:
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
等價于以下 SQL語句:
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
查詢函數(shù)能混合使用 ?Q
? 對象和關(guān)鍵字參數(shù)。所有提供給查詢函數(shù)的參數(shù)(即關(guān)鍵字參數(shù)或 ?Q
?對象)均通過 ?"AND"
? 連接。然而,若提供了 ?Q
?對象,那么它必須位于所有關(guān)鍵字參數(shù)之前。例如:
Poll.objects.get(
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
question__startswith='Who',
)
相當(dāng)于前面的例子,但這是無效的:
# INVALID QUERY
Poll.objects.get(
question__startswith='Who',
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: