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