6. Django学习笔记——F查询和Q查询

F查询与Q查询得区别:
Q查询——对对象的复杂查询
F查询——专门取对象中某列值的操作(内部的字段匹配)

导入Q,F对象 :

from django.db.models import Q,F

F:主要作用(一个表里面内部字段与字段之间的对比操作)
1)和models自身的字段进行对比。比如:

Student.objects.filter(age__gt=F('age2'))

2) 对字段进行数学运算。比如:

Student.objects.filter(age__gt=F('age2') * 2)

Q: 对对象的复杂查询
且操作:
默认情况下Django的查询只是且操作如下:
找到用户为zhangsan并且age=18的数据

UserInfo.objects.filter(username='zhangsan',age='18')

或操作:
如果需要执行或操作 ,就需要使用到Q对象了。
Q对象可以用 & | ~ (与,或,非)去连接:

UserInfo.objects.filter(Q(age__gt=20) & Q(age__lt=50))
UserInfo.objects.filter(Q(age__gt=20) | Q(age__lt=50))
UserInfo.objects.filter(~Q(age__lt=50))

等于: WHERE question LIKE 'Who%' OR question LIKE 'What%'
如果Q和关键字参数一起使用的话,Q必须放在关键字参数前面:

Student.objects.get(Q(age__gt=20) | Q(age__lt=50), name__contains='zhang')

你可能感兴趣的:(Django的学习笔记)