[TOC=1,5] >[success] # Field查找双下划线 >[danger] ##### 常用的基本判断 ~~~ __gt 大于 __gte 大于等于 __lt 小于 __lte 小于等于 ~~~ >[danger] ##### __exact精准匹配 可省略 ~~~ Blog.objects.get(name__iexact='beatles blog') Blog.objects.get(name__iexact=None) ~~~ 等同 ~~~ SELECT ... WHERE name = 'beatles blog'; SELECT ... WHERE name IS NULL; ~~~ >[danger] ##### __iexact不区分大小写精确匹配 * * * * * >[danger] ##### __contains -模糊查询区分大小写 ~~~ Entry.objects.get(headline__contains='Lennon') ~~~ SQL等效: ~~~ SELECT ... WHERE headline LIKE '%Lennon%'; ~~~ * * * * * >[danger] ##### __icontains 模糊查询不区分大小写。 * * * * * >[danger] ##### __istartswith 不区分大小写,开始位置匹配 >[danger] ##### __endswith 以...结尾区分大小写 ~~~ Entry.objects.filter(headline__endswith='Lennon') ~~~ SQL等效: ~~~ SELECT ... WHERE headline LIKE '%Lennon'; ~~~ >[danger] ##### __iendswith 以...结尾,忽略大小写 * * * * * >[danger] ##### __in在给定的列表 ~~~ 存在于一个list范围内 Entry.objects.filter(id__in=[1, 3, 4]) 等价sql: SELECT ... WHERE id IN (1, 3, 4); ~~~ * * * * * >[danger] ##### range包含于之中 BETWEEN and ~~~ import datetime start_date = datetime.date(2005, 1, 1) end_date = datetime.date(2005, 3, 31) Entry.objects.filter(pub_date__range=(start_date, end_date)) ~~~ SQL等效: ~~~ SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31'; ~~~ >[danger] date/year/month/day 对于datetime字段,将值作为日期转换。 允许链接附加字段查找。 获取日期值。 ~~~ Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1)) Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1)) ~~~ 对于日期和日期时间字段,确切的年匹配。 允许链接附加字段查找。 整数年 ~~~ Entry.objects.filter(pub_date__year=2005) Entry.objects.filter(pub_date__year__gte=2005) ~~~ SQL等效: ~~~ SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31'; SELECT ... WHERE pub_date >= '2005-01-01'; ~~~ 对于日期和日期时间字段,确切的月份匹配。 允许链接附加字段查找。 取整数1(1月)至12(12月)。 ~~~ Entry.objects.filter(pub_date__month=12) Entry.objects.filter(pub_date__month__gte=6) ~~~ SQL等效: ~~~ SELECT ... WHERE EXTRACT('month' FROM pub_date) = '12'; SELECT ... WHERE EXTRACT('month' FROM pub_date) >= '6'; ~~~ >[success] # 聚合函数 >[danger] ##### aggregate(args,*kwargs) ~~~ def index(request): from cm import models from django.db.models import Avg,Min,Sum,Max,Count obj1 = models.Book.objects.all().aggregate(Avg("price")) print(obj1) return HttpResponse('ok') ~~~ 打印结果: {'price__avg': 91.4}