Q查询,即查询复杂的对象,可以搭配 “|” 查询多个对象
参考链接:
https://www.cnblogs.com/linjiqin/p/3817814.html
引入:
from django.db.models import Q
查询:
data = news.objects.filter (Q(question__startswith='Who') | Q(question__startswith='What'))
Q对象可以用**~**操作符放在前面表示否定,也可允许否定与不否定形式的组合
data = news.objects.filter (Q(question__startswith='Who') | ~Q(pub_date__year=2005))
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对象放在关键字参数查询的前面
正确:
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)))