0X00 普通的查询
1 2 3 4
| from django.db.models import Q
queryset.filter(Q(age=233)) queryset.filter(Q(name='shawn'))
|
这种查询方式与普通的方式比起来没什么区别。
1 2
| queryset.filter(age=233) queryset.filter(name='shawn')
|
0X01 AND
1 2 3
| from django.db.models import Q
queryset.filter(Q(age__range=(18, 25), Q(gender='F'), Q(beautiful=True))
|
把多个条件用逗号分割开就可以了,或者使用&
符分割开。
0X02 OR
1 2 3
| from django.db.models import Q
queryset.filter(Q(gender='F') | Q(province=u'四川') | Q(name=u'王铁蛋'))
|
这里用|
符号分割开筛选条件,最终筛选得到的是”所有女生、四川人和叫王铁蛋的人”,也就是说相当于分别筛选了这三个条件,最终取了并集。这种查询如果用普通方法进行查询就会很麻烦,可能要写成下面这样:
1
| queryset.filter(gender='f') | queryset.filter(province=u'province=u'四川') | queryset.filter(name=u'王铁蛋')
|
0X03 NOT
使用Not查询的方式就比较诡异了
1 2 3
| from django.db.models import Q
queryset.filter(~Q(gender='M'))
|
0X04 组合技
有的时候经常需要查询同样的条件多次,这种方法就可以一次编写查询条件多次执行
1 2 3 4 5 6 7 8
| import operator from django.db.models import Q
q1 = reduce(operator.and_, Q(gender='F', age__range=(18, 25))) q2 = reduce(operator.or_, Q(gender='M', age__range(3, 5)))
queryset.filter(q1) queryset.filter(q2)
|