Q查詢——對對象的複雜查詢
F查詢——專門取對象中某列值的操作
Q查詢
1、Q對象(django.db.models.Q)可以對關鍵字參數進行封裝,從而更好地應用多個查詢,例如:
from django.db.models import Q from login.models import New #models對象news=New.objects.filter(Q(question__startswith='What'))
2、可以組合使用&,|操作符,當一個操作符是用於兩個Q的對象,它產生一個新的Q對象。
Q(question__startswith='Who') | Q(question__startswith='What')
3、Q對象可以用~操作符放在前面表示否定,也可允許否定與不否定形式的組合
Q(question__startswith='Who') | ~Q(pub_date__year=2005)
4、應用範圍
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')
5、Q對象可以與關鍵字參數查詢一起使用,不過一定要把Q對象放在關鍵字參數查詢的前面。
正確:
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)))