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')