5.2.4 字段查询
相当于sql语句中where子句,它可以为filter、exclude和get方法提供参数。
属性名称__比较运算符=值 #是两个下划线
操作符 | 说明 | 示例 |
---|---|---|
exact/= | 精确判等 | uname = ‘admin’ uname__exact = 'admin' uname__exact = None #uname is null |
iexact | 不区分大小写判等 | name__iexact = ‘admin’ |
contains | 模糊查询,等价like ‘%值%’ | uname__contains = ‘admin’ |
contains | 不区分大小写的模糊查询 | uname__icontains = ‘Admin’ |
startswith | 以…开头 | uname__startswith = ‘a’ |
istartswith | (不区分大小写)以…开头 | uname__istartswith = ‘a’ |
endswith | 以…结尾 | uname__endswith = ‘m’ |
iendswith | (不区分大小写)以…结尾 | uname__iendswith = ‘m’ |
isnull | 判空(等价 = None) | uname__isnull = True #等价 uname is nullunam__isnull = False #等价 uname is not null |
in | 包含 | uid__in = [1,2,3] #in后面必须是可迭代对象 |
range | 范围测试(相当between and) | uid__range = [2,5] #uid >=2 and cid <=5 |
gt/gte | 大于/大于等于 | uid__gt = 2 |
lt/lte | 小于/小于等于 | uid__lte = 2 |
regex | 正则匹配 | uname__regex= r’^a’ |
iregex | 不区分大小写的正则匹配 | uname__iregex= r’^a’ |
-
in后面可以跟一个子查询,但要求子查询只能返回一个字段
User.objects.filter(uid__in = (2,3,4)) User.objects.filter(uid__in = [2,3,4]) res = User.objects.filter(uid__gt = 1).values('uid') #查询集中只有一个字段uid User.objects.filter(uid__in = res
-
日期查询
- year、month、day、week_day、hour、minute、second
#等价sql: select * from User where year(regtime) = 2018 User.objects.filter(regtime__year = 2018)