django Q和F查詢

Q查詢——對對象的複雜查詢
F查詢——專門取對象中某列值的操做django

Q查詢
一、Q對象(django.db.models.Q)能夠對關鍵字參數進行封裝,從而更好地應用多個查詢,例如:spa

from django.db.models import Q
from login.models import New #models對象

news=New.objects.filter(Q(question__startswith='What'))

 

二、能夠組合使用&,|操做符,當一個操做符是用於兩個Q的對象,它產生一個新的Q對象。code

Q(question__startswith='Who') | Q(question__startswith='What')

 

三、Q對象能夠用~操做符放在前面表示否認,也可容許否認與不否認形式的組合對象

Q(question__startswith='Who') | ~Q(pub_date__year=2005)

 

四、應用範圍blog

Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
等價於
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

 

五、Q對象能夠與關鍵字參數查詢一塊兒使用,不過必定要把Q對象放在關鍵字參數查詢的前面。get

正確:
Poll.objects.get(
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
question__startswith='Who')

錯誤:
Poll.objects.get(
question__startswith='Who',
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
相關文章
相關標籤/搜索