一、查询中当做或(Q(条件) | Q(条件))
from django.db.models import Q
Student.objects.filter(Q(age__gt=18) | Q(age__lt=10))
# 上面为查询年龄大于18或者小于10岁的学生
二、查询中当做非(~Q(条件))
我们如果想查询非得时候其实可以使用exclude,比如下面
Student.objects.exclude(age=15)
# 将学生年龄为15岁的排除掉
由于Q非常的灵活,如果要求查询名字不等于jack,并且大于10岁的
# 第一种
Student.objects.exclude(name=jack).filter(age__10)
# 第二种
Student.objects.filter(~Q(name=jack), age__gt=10)
三、构建一个Q对象,供Count使用
我们在进行聚合的时候,比如使用Count,如果我们想要在聚合的过程中,进行条件过滤,可能你觉得不会发生,如果想过滤,直接在前面使用filter不就好了,但是,如果我们的表关系足够复杂,并且查询条件比较复杂,是需要的
Count('pk', filter=Q(account_type=True))