Django 过滤条件详解

2019-12-02 16:35:11 最后一行代码 阅读:333

分类: Django

1、精确匹配(如果值为None,就会查找数据库中为NULL的字段)

.get(id__exact=2)

.get(title__exact=None)

 

2、精确匹配(忽略大小写)

.get(title__iexact="Abc")

 

3、包含匹配(忽略大小写)

.filter(title__contains="abc")

 

4、包含匹配(不忽略大小写)

.filter(title__icontains="Abc")

 

5、从指定序列中匹配已存在的对象(可以为list、tuple或可迭代对象,也可以是QuerySet对象)

.filter(id__in=[1,2])

.filter(id__in=(1,2))

.filter(title__in=['标题1', '标题2'])

.filter(id__in=range(3))

.filter(关联字段__in=QuerySet)

 

6、大小筛选

__gt     大于

__gte   大于等于

__lt      小于

__lte    小于等于

.filter(id__gt=5)

 

7、筛选是否为NULL的字段

.filter(title__isnull=True)

.filter(title__isnull=False)

 

8、正则表达式筛选(区分大小写)

filter(title__regex=r"^hello")

 

9、正则表达式筛选(不区分大小写)

filter(title__iregex=r"^hello")

 

10、排除筛选

filter().exclude(id__lt=5)

 

11、时间日期筛选(如果用到MySQL数据库,需要导入时区文件,否则无法进行日期筛选)

# 假设time是时间字段
import datetime
.filter(time__date=datetime.date(2019,8,1))    --> 筛选日期为2019年8月1日
.filter(time__time=datetime.datetime.now())    --> 筛选时间
.filter(time__year=2019)                       --> 筛选年份为2019的博客文章
.filter(time__month=9)                         --> 筛选月份为9的博客文章
.filter(time__day=31)                          --> 筛选日份为31的博客文章
.filter(time__week_day=2)                      --> 筛选周一(1表示星期天,2-7表示周一到周六)
.filter(time__hour=9)                          --> 筛选9时
.filter(time__minute=50)                       --> 筛选50分钟
.filter(time__second=40)                       --> 筛选40秒

# 数据库中保存的时间秒单位都是浮点数,如果精确秒单位匹配要使用区间"__range=(time1,time2)"。
start = datetime.datetime(hour=8,minute=10,second=25)
end = datetime.datetime(hour=8,minute=10,second=26)
.filter(time__time__range=(start,end))

 

12、筛选字段值以指定字符串开头的数据(区分大小写) 

.filter(name__startswith="xxx")

 

13、筛选字段值以指定字符串开头的数据(忽略大小写)

.filter(name__istartswith="xxx")

 

14、筛选字段值以指定字符串结尾的数据(区分大小写)

.filter(name__endswith="xxx")

 

15、筛选字段值以指定字符串结尾的数据(忽略大小写)

.filter(name__iendswith="xxx")

 

16、筛选字段值在指定区间内所有对象(常用于筛选指定时间内所有数据)

.filter(id__range=(1, 5))

回复:

快来抢沙发

老板赏瓶水呗
微信 微信 支付宝 支付宝