首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用django-filter构建过滤器类,允许按一个模型字段的多个值进行查询

django-filter 是一个非常强大的库,可以帮助你在 Django 项目中轻松实现过滤功能。如果你想构建一个过滤器类,允许按一个模型字段的多个值进行查询,可以使用 django_filters.BaseInFilterdjango_filters.CharFiltermethod 参数结合自定义过滤方法。

以下是一个示例,展示了如何使用 django-filter 构建一个过滤器类,允许按一个模型字段的多个值进行查询。

安装 django-filter

首先,确保你已经安装了 django-filter

代码语言:javascript
复制
pip install django-filter

定义模型

假设你有一个简单的模型 Product,其中包含一个 category 字段:

代码语言:javascript
复制
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    category = models.CharField(max_length=100)

定义过滤器类

接下来,定义一个过滤器类,允许按 category 字段的多个值进行查询:

代码语言:javascript
复制
import django_filters
from .models import Product

class ProductFilter(django_filters.FilterSet):
    categories = django_filters.CharFilter(field_name='category', method='filter_by_categories')

    class Meta:
        model = Product
        fields = ['categories']

    def filter_by_categories(self, queryset, name, value):
        categories = value.split(',')
        return queryset.filter(category__in=categories)

在这个示例中,我们使用 CharFilter 并指定 method 参数为 filter_by_categories。在 filter_by_categories 方法中,我们将传入的值按逗号分隔,并使用 category__in 过滤查询集。

使用过滤器类

在视图中使用过滤器类:

代码语言:javascript
复制
from django.shortcuts import render
from django_filters.views import FilterView
from .models import Product
from .filters import ProductFilter

class ProductListView(FilterView):
    model = Product
    filterset_class = ProductFilter
    template_name = 'product_list.html'

配置 URL

urls.py 中配置 URL:

代码语言:javascript
复制
from django.urls import path
from .views import ProductListView

urlpatterns = [
    path('products/', ProductListView.as_view(), name='product_list'),
]

模板示例

在模板中渲染过滤后的结果:

代码语言:javascript
复制
<!-- templates/product_list.html -->
<form method="get">
    <label for="categories">Categories (comma separated):</label>
    <input type="text" name="categories" id="categories" value="{{ request.GET.categories }}">
    <button type="submit">Filter</button>
</form>

<ul>
    {% for product in object_list %}
        <li>{{ product.name }} - {{ product.category }}</li>
    {% endfor %}
</ul>

测试过滤功能

现在,你可以通过访问 /products/?categories=category1,category2 来测试过滤功能,其中 category1category2 是你想要过滤的类别。

通过这种方式,你可以使用 django-filter 构建一个过滤器类,允许按一个模型字段的多个值进行查询。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python测试开发django-169.过滤器django-filter 入门使用

前言 在管理后台查询时候,经常有需要查询包含某个内容,按时间段查询,或者商品价格大于多少,小于多少各种查询条件。 django-filter 过滤器专门解决这种查询问题。...如果传递了一个可调用对象,它将以 request 为唯一参数进行调用 。这允许您执行相同类型基于请求过滤,而无需求助于覆盖FilterSet....您可以使用 Django __语法遍历“关系路径”来过滤相关模型字段。 例如:manufacturer__name。 lookup_expr: 过滤时使用字段查找。...使用 Meta.fields 生成过滤器 FilterSet Meta 提供了一个fields属性,可用于轻松指定多个过滤器,而无需大量代码重复。...中fields序列中项目Meta可能包括“关系路径”,使用 Django __语法过滤相关模型字段: class ProductFilter(django_filters.FilterSet)

2.2K20

django rest framework使用django-filter用法

django rest framework使用django-filter注意事项: 一定要在setting文件里面加载如下代码,而不是只安装包,否则django应用不报错,但是不能正确过滤。...django-filter过滤器添加进来 和 rest_frameworkfilters添加进来一起用, 也可以单个用, 看你需求 filter_backends = [DjangoFilterBackend...# 等同就是根据你过滤字段数据必须跟数据库里那个字段数据相同 # filter_fields = ['name', 'shop_price'] # 指定过滤器 filter_class...(name="name", lookup_expr="icontains") class Meta: # 指定模型 model = Goods # 显示这两个字段...以上这篇django rest framework使用django-filter用法就是小编分享给大家全部内容了,希望能给大家一个参考。

1.9K10
  • 【愚公系列】2022年04月 Python教学课程 74-DRF框架之过滤

    4.3 嵌套查找 4.4 参数说明 4.5 自定义过滤器 一、普通过滤 REST 框架通用列表视图默认行为是返回模型管理器整个查询集。...1.针对当前用户进行筛选 您可能希望筛选查询集,以确保仅返回与发出请求的当前经过身份验证用户相关结果。 为此,可以基于用户进行筛选。....+)/$', PurchaseList.as_view()), 然后,您可以编写一个视图,返回 URL 用户名部分筛选查询集: class PurchaseList(generics.ListAPIView...筛选初始查询最后一个示例是根据 url 中查询参数确定初始查询集。...username', 'email', 'profile__profession'] 4.3 嵌套查找 对于 JSONField 和 HStoreField 字段,您可以使用相同双下划线表示法根据数据结构中嵌套进行查找

    2.5K30

    第 9 篇:实现分类、标签、归档日期接口

    之前序列化字段都是在序列化器(Serializer)里面使用,因为通常来说接口需要序列化一个对象多个字段。...用法也很简单,实例化序列化字段,调用其 to_representation 方法,将需要序列化传入即可(其实序列化器在序列对象多个字段时,内部也是分别调用对应序列化字段 to_representation...category,tags 两个过滤字段因为是 Post 模型中定义字段,因此 django-filter 可以自动推断其过滤规则,只需要在 Meta.fields 中声明即可。...由于这两个字段在 Post 中没有定义,Post 记录时间字段为 created_time,因此我们需要显示地定义查询规则,定义规则是: 查询参数名 = 查询参数值类型(查询模型字段查询表达式...可以看到右上角多了个过滤器(红框圈出部分)。 点击会弹出过滤参数输入交互面板,在这里可以交互式地输入查询过滤参数

    2.6K30

    Flask框架在Python面试中应用与实战

    Django REST framework (DRF) 是一个强大而灵活工具包,用于构建Web API,特别是基于Django应用程序。...序列化器(Serializers):阐述序列化器如何定义数据结构、验证与序列化/反序列化数据,以及关联模型(ModelSerializer)使用。...过滤(Filtering):介绍使用django-filter库或内置filterset_fields实现资源过滤。排序(Sorting):讲解如何启用排序功能,允许客户端通过查询参数指定排序字段。...二、易错点与避免策略序列化器验证遗漏:确保在序列化器中充分定义验证规则,使用validate_方法对关联字段、自定义逻辑进行验证,防止脏数据进入数据库。...对于复杂查询,考虑使用Django ORM查询优化技巧或添加数据库索引。

    13410

    用django写接口(实战篇)

    首先我们需要安装过滤器模块 pip install django-filter 然后我们需要将过滤器模块到 settings.py 中 INSTALLED_APPS 进行注册才可以使用。...title="xxxxxx"&format=json 进行访问,可以得到筛选结果。但是有个问题就是只能精确查询才可以,如果你输入参数不完整,就查询不到,接下来,我们尝试着完成模糊查询。...字段,author 我们使用 django 自带 User , # 我们通过 ForeignKey 进行关联两个 Model,related_name 为反向引用, # 即我们在...然后我们发现就可以进行操作了,但是目前这个权限有个缺点,就是不是 post 下 author 登陆后也可以对 post 进行操作修改,我们重新通过继承 BasePermission 重写一个权限,限制只能由...return Response({'token': token.key, 'user_id': user.pk, 'user_name': user.username}) 然后在 url 绑定我们自己认证即可返回我们需要字段

    2.1K20

    ElasticSearch可扩展开源弹性搜索解决方案

    ,基于它们构建适当查询 4.multi_match:与match类似,不同在于通过fields配置可作用于多个字段上 5.query_string:支持Apache Lucene所有的查询语法 6....:允许我们在要查询内容中使用符*和?...字段就可以在任何搜索中使用过滤器 2.range:将搜索范围限制在字段取值在给定界限内文档 3.exists:只选择有指定字段文档 4.missing:与exists相反,还可以指定将哪些作为空处理...:将两个查询封装在一起,并降低其中一个查询所返回文档分值 3.constant_score:用于封装另一个查询过滤器),被封闭查询过滤器)返回每个文档都得到一个恒定分值,允许我们严格控制赋予被查询过滤器匹配每个文档分值...4.indices:需要在多个索引上执行一个查询时非常有用 5.custom_filters_score:允许我们封装一个查询和若干个过滤器 6.custom_boost_factor:允许我们封装另外一个查询

    1.5K30

    android studio logcat技巧

    多个窗口中使用Logcat 选项卡可帮助您轻松在不同设备或查询之间切换。您可以通过单击新建选项卡 创建多个 Logcat 选项卡。右键单击选项卡可以对其进行重命名和重新排列。...在 Android Studio 中,您可以直接从主查询字段生成键值搜索。该查询系统提供您想要查询内容准确性,并根据键值排除日志。虽然您可以选择使用正则表达式,但您不必依赖它们进行查询。...要查看建议,请在查询字段 Ctrl + Space 。 图 3. 在查询字段 Ctrl + Space 可查看建议查询列表。...age:30sage:5mage:3hage:1d 请注意,时间戳是与主机时间戳进行比较,而不是与连接设备时间戳进行比较。如果设备时间设置不正确,则此查询可能无法预期工作。...name 键 name 键可让您为已保存过滤器提供唯一名称,以便在过滤器历史记录下拉列表中轻松识别它。尽管多次指定 name 不会出现错误,但 IDE 仅在查询使用 name 最后指定

    10910

    Django框架学习(三)

    render 其实就是就是下面模板详细步骤一个简写封装。 3.3模板详细步骤(重点掌握) 如果我们不想返回响应对象,只是想渲染一下页面,替换数据,那么我们可以下面的来。...| 过滤器(参数...)}} b) Django中模板过滤器使用: {{ 模板变量 | 过滤器:参数 }} 注意:Django中过滤器:号之后只能接收一个参数 ?...4.数据库 ORM框架: 作用:将模型和数据表进行对应,通过面向对象方式进行数据库操作。 flask中SQLALchemy Django中自带ORM框架,可以直接进行使用。...选项 选项 说明 null 如果为True,表示允许为空,默认是False db_column 字段名称,如果未指定,则使用属性名称。...AutoField选项使用 unique 如果为True, 这个字段在表中必须有唯一,默认是False 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理

    1.8K40

    Django模型model

    会为表增加自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认主键列 属性命名限制 不能是python保留关键字 由于django查询方式,不允许使用连续下划线...,则该字段允许为空白,默认是 False 对比:null是数据库范畴概念,blank是表单验证证范畴 db_column:字段名称,如果未指定,则使用属性名称 db_index:若为 True...模型查询 查询集表示从数据库中获取对象集合 查询集可以含有零个、一个多个过滤器 过滤器基于所给参数限制查询结果 从Sql角度,查询集和select语句等价,过滤器像where和limit子句...接下来主要讨论如下知识点 查询字段查询:比较运算符,F对象,Q对象(1)模型查询集合 在管理器上调用过滤器方法会返回查询查询集经过过滤器筛选后返回新查询集,因此可以写成链式过滤 惰性执行:...pk__lt=6)) 可以使用&|~结合括号进行分组,构造做生意复杂Q对象 过滤器函数可以传递一个多个Q对象作为位置参数,如果有多个Q对象,这些参数逻辑为and 过滤器函数可以混合使用

    13510

    第19篇-Kibana对Elasticsearch实用介绍

    索引MongoDB,一个简单自动完成索引项目 19.Kibana对Elasticsearch实用介绍 20.不和谐如何索引数十亿条消息 21.使用Django进行ElasticSearch简单方法...● 选择具有特定数据地理位置搜索数据 ● 地理搜索天汇总数据 客户群 Elasticsearch非常有趣,以至Mozilla,GitHub,Stack Exchange,Netflix和更多用户使用它...此外,分片允许您在各个分片之间分配和并行化操作,从而提高性能。 复制品 Elasticsearch允许您为索引分片制作一个多个副本,这些副本称为副本分片或副本。...将查询DSL视为查询AST(抽象语法树),它由两种子句组成: ● 叶子查询子句:它在特定字段中查找特定,例如match,term或range查询。...查询子句行为不同,取决于它们是在查询上下文中还是在过滤器上下文中使用: ● 查询上下文:查询上下文中使用查询子句回答以下问题:“此文档与该查询子句匹配程度如何?” 。

    5.1K00

    PowerBI 2020.11 月更新 - 各类图标更新及查找异常

    以前,您有两个用于过滤器查询选项:立即应用基本过滤器(默认选项)或向每个基本过滤器添加应用按钮。对于那些喜欢即时交互性而不是查询减少的人,立即应用基本过滤器一个选项是理想选择。...现在,您可以在地图上单击并拖动以创建一个选择矩形,使您可以轻松地一次选择多个点。感谢您到目前为止所有反馈,请继续让我们知道您如何找到体验以及希望支持其他视觉效果!...它允许用户将PowerBI与StarburstPresto发行版连接。这种组合使查询处理可以在Presto中执行,而不是将数据移动到Power BI进行处理。...使用内置DRILL DOWN DONUT PRO视觉效果对数据进行 当根据其位置和邻近性将数据分组时,可以将它们变成甜甜圈图以可视化集群内容–数据将自动类别字段分组。切片充当类别过滤器。...您还可以通过使用颜色作为条件变量格式第四个变量(或类别)来打包更多信息。 类别字段用于标记气泡,并在多个气泡时激活向下钻取模式。

    8.3K30

    Django教程 —— 模型详解

    引言 在之前 Django模型设计 中简单介绍了如何定义模型,在这篇中将做一个汇总。让大家更加了解Django模型。...: 当前选择数据库支持字段类型 渲染管理表单时使用默认html控件 在管理站点最低限度验证 Django 会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后...不允许使用连续下划线,这是由 Django 查询方式决定,在第4节会详细讲解查询。...定义属性时需要指定字段类型,通过字段类型参数指定选项,语法如下: 属性 = models.字段类型(选项) 模型字段类型 使用时需要引入django.db.models 包 from django.db...blank 如果为True,则该字段允许为空白,默认是False。 db_column 字段名称,如果未指定,则使用属性名称。

    1.7K20

    教你 10 分钟构建一套 RESTful API 服务( 下 )

    扩展,增加了对快速构建 REST API 支持 django-rest-swagger:Django 支持Swagger UI,可以生成 API 接口文档 django-filter:配合 djangorestframework...准备 首先,我们使用 Pycharm 创建一个 Django 项目,并新增一个 App ?...实现 具体步骤如下: 第 1 步,编写模型,并映射数据库 新建一个,继承自 django.db.models 中 Model 对象,新增几个字段,指定数据类型和默认 # api/restfulapi...第 2 步,序列化模型 使用 djangorestframework 提供序列化器 ModelSerializer,将上面定义好模型转换为其他数据格式,比如:JSON 需要注意是,这里可以序列化所有字段...,不同错误状态码,返回不同数据 需要注意是, settings.py 文件指定异常处理和该异常处理路径要保持一致 # 异常处理 def custom_exception_handler(

    1.6K40

    在 Laravel Eloquent 模型使用作用域进行查询

    问题引出 在通过 Eloquent 模型实现增删改查这篇教程中,我们已经学习了如何在 Eloquent 模型进行各种查询,但是这些查询大多需要手动调用查询构建器提供各种方法来实现。...如果有一些查询需要在多个地方调用,那么在每个地方都要编写同样代码,有没有什么办法对这种场景下查询代码进行优化呢? Eloquent 模型提供「Scope」功能就可以帮我们实现这种优化。...接下来,我们就来演示如何在 Eloquent 模型使用「作用域」进行查询。...你可以在这里进行一些模型初始化操作。 这样,就可以将刚刚编写全局过滤器应用到 User 模型上。如果有多个全局作用域,可以多次调用 static::addGlobalScope 方法来注册。...推荐使用这种方式来构建需要在多个场景调用复杂 Eloquent 查询。 移除局部作用域很简单,不要在查询中指定对应过滤器方法即可。

    2.5K20

    Spring三兄弟:Spring、Spring Boot、Spring Cloud100个常用注解大盘点

    当有多个同一Bean时,需要配合@Qualifier使用。 @Qualifier:当有多个同一Bean时,可以用@Qualifier(“name”)来指定。...@SessionAttributes:用于标注,表示将模型某些属性存储到HttpSession中,以便在多个请求之间共享这些属性。...@PathVariable:用于获取URI模板变量(即URL中占位符)。 @RequestParam:用于获取查询参数。...@Autowired类型装配,当有多个同类型Bean时,可以使用@Qualifier指定Bean名称。@Resource名称装配,可以指定Bean名称。...分别用于获取URL模板变量、获取查询参数、读取请求体和写入响应体。 @ExceptionHandler、@ControllerAdvice: 用于全局异常处理注解。

    30211
    领券