Django REST Framework (DRF) 是一个开源的 Web 框架,它建立在 Django 上,可以帮助你轻松地构建 RESTful API。...使用内置的过滤器DRF 内置了很多过滤器,其中一些是常用的过滤器:ExactFilter:使用精确匹配过滤,可以用于过滤整数、布尔值、字符串等类型的字段;CharFilter:使用模糊匹配过滤,可以用于过滤字符串类型的字段...;ChoiceFilter:使用选项过滤,可以用于过滤多选字段;DateFilter:使用日期过滤,可以用于过滤日期类型的字段;NumberFilter:使用数字过滤,可以用于过滤数字类型的字段;RangeFilter...编写自定义的过滤器可以让你更好地控制过滤逻辑,并且可以使用任何 Django QuerySet 方法来处理过滤器。...另外,我们还展示了如何编写自定义的过滤器,以便你可以更好地控制过滤逻辑,并使用任何 Django QuerySet 方法来处理过滤器。
fields = ['price', 'release_date'] 以上为”价格”和”发布日期”字段生成”精确”查找。...您可以使用 Django 的__语法遍历“关系路径”来过滤相关模型上的字段。 例如:manufacturer__name。 lookup_expr: 过滤时使用的字段查找。...: model = Product fields = ['price', 'release_date'] 以上为“价格”和“发布日期”字段生成“精确”查找。...过滤器查找类型“精确”是隐式默认值,因此永远不会添加到过滤器名称中。在上面的示例中,发布日期的确切过滤器是`release_date`,而不是`release_date__exact`。...类中fields序列中的项目Meta可能包括“关系路径”,使用 Django 的__语法过滤相关模型上的字段: class ProductFilter(django_filters.FilterSet)
>>> Dept.objects.all() QuerySet [, , , ]> 过滤数据。...>>> Dept.objects.order_by('no') # 查询所有部门按部门编号升序排列 QuerySet [, , ...>>> Dept.objects.order_by('no')[0:2] # 按部门编号排序查询1~2部门 QuerySet [, ]> >>> >>>...Dept.objects.order_by('no')[2:4] # 按部门编号排序查询3~4部门 QuerySet [, ]> 高级查询。...: exact / iexact:精确匹配/忽略大小写的精确匹配查询 contains / icontains / startswith / istartswith / endswith / iendswith
2、过滤类 class RobotFilter(django_filters.FilterSet): # 使用过滤:URL?...(field_name='city') # lookup_expr(可选)为判断条件,field_name(必选)为模型类属性,created_time查询字符串 created_time...表示精确匹配, 并且忽略大小写 author = django_filters.CharFilter(lookup_expr='icontains') #icontains表示模糊查询(包含),...并且忽略大小写 price = django_filters.NumberFilter(look_expr='exact') #exact表示精确匹配 task_res_state =...django_filters.CharFilter(method="get_task_res_state") def get_task_res_state(self, queryset
以下是其中的一些:精确过滤器(ExactFilter)精确过滤器允许您根据一个或多个精确值来过滤API数据。它通常用于获取一个特定的对象或一组对象。...类来实现精确过滤器。...以下是一个使用精确过滤器的示例:from django_filters import rest_framework as filtersfrom rest_framework import genericsfrom...,并指定了要过滤的字段。...这将允许我们根据特定字段的值来获取数据。
() # 所有图书get_queryset() 方法:允许动态定义查询集,比如基于当前用户过滤数据。...(queryset, many=True) return Response(serializer.data)使用示例:精确过滤:/books/?...self.filter_queryset() 应用过滤在 filter_queryset 中,首先调用父类方法应用配置的过滤器然后遍历所有查询参数,检查是否与模型字段匹配对于匹配的参数,构建过滤条件并应用到查询集最后序列化过滤后的查询集并返回响应使用示例假设...title=Django - 过滤标题包含 "Django" 的图书/api/books/?...published_year=2022 - 过滤 2022 年出版的图书优点灵活性 - 无需为每个过滤条件编写专门的代码可扩展性 - 添加新的模型字段后,自动支持对该字段的过滤简洁性 - 代码简洁明了,
Queryset queryset技巧 #1 aggregate models.py from django.db import models class Author(models.Model):...的值,相当于count(). annotate 对于 queryset 中的每个值在指定的属性上进行汇总,相当于group_by >>> from django.db.models import Count...,只有数据库是 PostgreSQL 才支持,其他数据库不支持按字段去重 models.SpecialGamesBet.objects.all().distinct("id") # 只有PostgreSQL...数据库才支持这种格式 #5 条件参数 __exact 精确 等于 like 'aaa' __iexact 精确 等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa...__month 日期字段的月份 __day 日期字段的日 __isnull=True/False
2.DRF过滤器 DRF提供了过滤功能,来实现简单高效的过滤。...等,即字段过滤、搜索、排序3种方式。...过滤的使用 通过django-filters的DjangoFilterBackend类实现字段过滤。...先实现精确过滤,views.py如下: class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): '''商品列表页...此时,可以根据字段进行过滤,但是只能精确比配,对于字符串型字段不能模糊匹配,对于数值型字段也不能匹配区间,因此需要自定义filters,新建filters.py如下: import django_filters
你可以给 QuerySet 叠加许多许多过滤条件,但是 django 并不会去执行他们,直到 QuerySet 被 evaluated (检查,评估?...,具体来说,这意味着使用数组切片或者索引限制查询结果集将不会保存缓存。....values_list(*fields, flat=False) 过滤字段 .all() .select_related(*field) 优化,可以把对象查出来,并附带字段,后期对象 .字段 不会再触发数据库操作...过滤字段 .none() 创建空的 QuerySet 调用 .none() 方法会创建一个空的 QuerySet ,里面不包含任何数据对象,并且在取值时也不会执行任何数据库操作(是 EmptyQuerySet...__year # 匹配 datetime、date 类型字段,直接指定精确的哪一年 Entry.objects.filter(pub_date__year=2005) # --> SELECT ...
目录 过滤Filtering 排序 过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。...pip install django-filter 在配置文件中增加过滤后端的设置: INSTALLED_APPS = [ ......',) } 在视图中添加filter_fields属性,指定可以过滤的字段 class BookListView(ListAPIView): queryset = BookInfo.objects.all...btitle=西游记 排序 对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序。...使用方法: 在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了
、连接符(减号) CommaSeparatedIntegerField(CharField) - 字符串类型,格式必须为逗号分割的数字 UUIDField(Field) - 字符串类型,Django Admin...存储组件,默认django.core.files.storage.FileSystemStorage width_field=None, 上传图片的高度保存的数据库字段名(字符串)...filter返回的是一个QuerySet对象,filter里可以设定多个过滤条件 4、查 查询数据使用QuerySet API。...从SQL 的角度,QuerySet和SELECT 语句等价,过滤器是像WHERE 和LIMIT 一样的限制子句。...like: __exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' _
search=H 总结: 内置过滤类的使用,模糊查询会将包含过滤字段的数据都过滤出来,前提是在search_fields列表内指定的字段; 内置过滤的特点是模糊查询 过滤字段参数为search 第三方过滤...对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持 安装:pip install django-filter 导入:from django_filters.rest_framework...'django_filters', # 需要注册应用, ] 在视图中添加filter_fields属性,指定可以过滤的字段 from django_filters.rest_framework import...title=Java&author=HammerZe # 多个字段过滤 总结: 第三方过滤类在filter_backends字段中写,filter_fields字段指定过滤的字段 第三方过滤类不支持模糊查询...方法,返回queryset对象,qs对象是过滤后的 视图类中使用,且不需要重写类属性去指定过滤的字段 过滤使用,支持模糊查询(自己定制过滤方式),通过filter方法来指定过滤规则 自定义过滤类 '''
文章目录 一、普通过滤 1.针对当前用户进行筛选 2.针对网址进行筛选 3.针对查询参数进行筛选 二、通用过滤 1.全局设置 2.视图设置 3.简单过滤 4.搜索器过滤 4.1 多字段查找 4.2 多字段查找...P.+)/$', PurchaseList.as_view()), 然后,您可以编写一个视图,返回按 URL 的用户名部分筛选查询集: class PurchaseList(generics.ListAPIView...= queryset.filter(purchaser__username=username) return queryset 二、通用过滤 除了能够重写默认查询集之外,REST 框架还包括对通用筛选后端的支持...filter_backends = [DjangoFilterBackend] 3.简单过滤 class ProductList(generics.ListAPIView): queryset...category=clothing&in_stock=True 4.搜索器过滤 4.1 多字段查找 仅当视图具有属性集时,才会应用该类。
配置完以上信息之后,直接按 Ctrl+shift+F10 运行一下 manage.py 文件。 出现如下结果,表示配置成功。...过滤器:在变量输出时对变量的值进行处理 可以通过使用过滤器来改变变量的输出显示 语法: {{变量|过滤器1:'参数1'|过滤器2:'参数值2'…}} 常用过滤器: lower:转换为小写 upper:...方法 all() 用法:MyModel.objects.all() 等价于select * from table 返回值:QuerySet容器对象,类数组对象,内部存放了MyModel实例...]> 可以在模型类中定义__str__方法,自定义QuerySet中的输出格式,则输出时能输出格式化字符串。...values(‘字段1’,’字段2’) 等价于select 列1,列2 from xxx 返回:QuerySet,但内部存字典,每一个字典代表一个数据 如: QuerySet [{'title
1 json就是“纯”字符串!将字符串中一切可以被执行的内容(类似于\n)统统转义为不可执行的字符串内容!...3 django-filter(1.0.1+) - 过滤支持。 4 django-crispy-forms - 改进了用于过滤的HTML显示。...name字段(昵称),而drf在找的是AbstractUser的username字段(用户名),没找到所以报错 解决方法:将UserProfile表中的__str__方法改成返回username: 1...2.自定义过滤器 在settings.py中注册django_filter,在末尾配置过滤 1 INSTALLED_APPS = [ 2 ..... 3 'django_filters...django_filters.rest_framework.FilterSet): 5 """商品过滤器""" 6 price_min=django_filters.NumberFilter
不指定时,Django会自动生成字段为id的自增长字段。...BooleanField: 布尔字段,为True或者False NullBooleanField: 允许为Null,True,False CharField(max_length=最大长度): 字符串类型...,但是没有上面的精确。...同样我们可以不使用Django帮我们生成的,我们可以自己创建一个。 为什么要自己创建? 1、过滤查询集,比如你查询全部数据,我只让你返回前十条。...过滤查询集实例 如果我们在models.py中创建一个模型: # 创建stuinfo表 class stuinfo(model.Model): # name 字符串类型 最大长度为20
群查之搜索过滤组件 群查之排序过滤组件 基础分页组件 偏移分页器 自定义过滤器 游标分页器(了解) Django过滤器插件 django-filter重点使用方法 drf...---- 过滤组件 在api目录下创建filters.py class LimitFilter: def filter_queryset(self, request, queryset, view...过滤器插件 主要来做分类查询,上面所写的都是模糊查询,没有精确到分类。...重点使用方法 ---- 自定义过滤字段 api目录下的filter.py文件中 ## django-filter插件过滤器类 from django_filters.rest_framework import...过滤插件:filter_class = CarFilterSet 5、自定义过滤器:自定义过滤类实现filter_queryset即可,根据筛选条件筛选后再返回queryset即可 使用: i)视图类添加过滤类
在聚合函式中指定聚合字段时,Django 允许你使用同样的 双下划线 表示关联关系,然后 Django 在就会处理要读取的关联表,并得到关联对象的聚合。...聚合和其他查询集子句 filter() 和 exclude() 聚合也可以在过滤器中使用。 作用于普通模型字段的任何 filter()(或 exclude()) 都会对聚合涉及的对象进行限制。...name__startswith="Django").annotate(num_authors=Count('authors')) 使用aggregate()子句时,过滤器有限制聚合对象的作用。...price')) 对注解过滤 注解值也可以被过滤。...在第一个查询中,注解在过滤器之前,所以过滤器对注解没有影响。 在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算的对象的范围。
查询类操作1)查询所有的结果,相当 sql 中的 select * fromlist = Test.objects.all()2)条件查询,filter 相关 sql 中的 where,用于过滤查询结果传多个参数...相关Django中model查询出来的结构类型为QuerySet,本质是一个查询对象集。...= list(data)QuerySet []> ---->QuerySet [{“id”:XXX, “name”:XXX}]>2)QuerySet对象转换成字典对象...从DB查询出来的是对象集,可以考虑django-rest-framework 库的serializers类,具体可参考:Tutorial 1: 序列化---查询条件总结字段名__op:__exact 精确等于...like ‘aaa’__iexact精确等于忽略大小写ilike‘aaa’__contains 包含 like ‘%aaa%’__icontains包含忽略大小写ilike‘%aaa%’,但是对于sqlite
djangorestframework==3.8.2 django-filter==2.0.0 #2 需求 获取某些数据时,需要按某些字段过滤 过滤时,有些的字段是 “跨表” 的字段,该如何处理 过滤时...,有些字段是 “区间” 字段(比如时间),该如何处理 过滤时,有些字段是 “跨表” 后的 “区间” 字段,又该如何处理 #3 起步 #3.1 新建一个Django项目 . ├── app │ ├──...#5 跨表过滤 需求:根据老师的名字过滤 class getUserListFilter(django_filters.rest_framework.FilterSet): teaname =...#6 区间过滤 新增字段createDate(用户创建时间) createDate = models.DateTimeField(verbose_name="用户创建时间",auto_now_add=True...需求:学生老师的薪资范围过滤 新增字段salary(老师薪资) filters.py class getUserListFilter(django_filters.rest_framework.FilterSet