Django filter中contains 用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django filter中contains 用法相关的知识,希望对你有一定的参考价值。

参考技术A 用PYTHON ,DJANGO 做站,在通常的情况下,需要用到 orM 的查询方法,比如object.filter(tag__contains='keywords')....

在这种情况下,如果你跟踪 sql 语句,你会发现,SQL 语句会生成 select .... like bianry '%keywords%', 如果是这样的语句,在某些情况是下是会出问题的,也就是说查询出来的数据可能会比你预计的少。

如果你用 raw sql 查总数 select count(*) from table where like '%keywords%' 得到数量可能比你用ORM 采用上面的方式得到的数据多,问题就在于生成的条件问题。

后来查询了 django 说明,如果把ORM 语句变成:object.filter(tag__icontains='keywords').... 就好了。

注意contains ,icontains 的区别. 后来从django官网查到了说明:

django查询过滤

查询过滤:

models.UserProfile.objects.filter(name__contains=‘liu‘) 忽略大小写在contains前面加个i

models.UserProfile.objects.filter(id__range=[1:3]) 根据id查找想要的数据

models.UserProfile.objects.all()[:5] 查询前5条

models.UserProfile..objects.order_by(‘name‘)[0]排序取第一条

models.UserProfile..objects.filter(name__startwith=‘liuyi‘) 查找 以什么开头的

models.UserProfile..objects.filter(name__endwith=‘liuyi‘) 查找 以什么j结尾的

 

单表内不同字段对比:

from django.db.models import F

models.UserProfile.objects.filter(name_gt=F(‘age‘))

 

单表内and查询:

frmo django.db.models import F

models.UserProfile.bojects.filter(name_gt=F(‘age‘),age_lt=F(‘name‘))

 

单表内or查询:

from django.db.models import Q

models.UserProfile.objects.filter(Q(name__gt=F(‘name‘))|Q(age__gt=F(‘age‘)))

 

原有数据自增:

entry.objects.all().update(age=F(‘age‘)+1)

 

orm聚合 求平均值

from django.db.models import Avg,Sum,Min,Max

models.UuserProfile.objects.all().aggregate(Avg(‘age‘))

 

orm聚合 求最大值,最小值,和

from django.db.models import Avg,Sum,Min,Max

models.UserProfile.objects.all().aggregate(Max(‘age‘))

models.UserProfile.objects.all().aggregate(ri=Sum(F(‘age‘)/F(‘name‘)),output_field=FloatField())

 

统计:

haha.objects.annotate(ri=Count(‘group‘))  group是字段,不清楚能不能直接写别的表名

以上是关于Django filter中contains 用法的主要内容,如果未能解决你的问题,请参考以下文章

django ORC模型

django model 条件过滤 queryset.filter(**condtions) 用法

Django- filter和simpletag,inclusion_tag的用法

django queryset合并问题

如何申请包含在django中列出?

django查询过滤