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

DRF-使用多个查询参数和外键进行过滤

DRF(Django Rest Framework)是一个基于Django的强大且灵活的Web API框架,它提供了一种简单且快速的方式来构建和发布Web API。在DRF中,使用多个查询参数和外键进行过滤是一种常见的需求,可以通过以下方式实现:

  1. 多个查询参数过滤:DRF提供了django_filters模块,可以轻松实现多个查询参数的过滤。首先,需要在DRF的视图类中定义一个过滤器类,该类继承自django_filters.FilterSet,并指定要过滤的字段和过滤方式。然后,在视图类中使用filterset_class属性将过滤器类与视图关联起来。最后,通过在URL中传递查询参数来进行过滤。

以下是一个示例:

代码语言:txt
复制
from django_filters import rest_framework as filters

class MyFilter(filters.FilterSet):
    name = filters.CharFilter(lookup_expr='icontains')
    age = filters.NumberFilter(lookup_expr='gte')

    class Meta:
        model = MyModel
        fields = ['name', 'age']

class MyView(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer
    filterset_class = MyFilter

在上述示例中,MyFilter定义了两个过滤字段:nameagename字段使用icontains进行模糊匹配,age字段使用gte进行大于等于的筛选。在MyView中,通过设置filterset_class属性将过滤器类与视图关联起来。

  1. 外键过滤:DRF允许通过外键进行过滤,可以使用外键的属性来过滤关联的对象。例如,假设有两个模型AuthorBook,它们之间存在外键关系,可以通过在URL中传递外键的属性来过滤相关的书籍。

以下是一个示例:

代码语言:txt
复制
class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def get_queryset(self):
        author_id = self.request.query_params.get('author_id')
        if author_id:
            return self.queryset.filter(author_id=author_id)
        return self.queryset

在上述示例中,BookViewSet继承自viewsets.ModelViewSet,通过重写get_queryset方法来实现外键过滤。在该方法中,首先获取URL中传递的author_id参数,然后根据该参数进行过滤。

这是一个简单的示例,实际应用中可能需要更复杂的过滤逻辑。可以根据具体需求使用DRF提供的过滤器类或自定义过滤器来实现更高级的过滤功能。

以上是关于使用多个查询参数和外键进行过滤的答案。如果您需要了解更多关于DRF的信息,可以参考腾讯云的相关产品和文档:

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

相关·内容

Django 模型查询2.3

简介 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤过滤器基于所给的参数限制查询的结果 从Sql的角度,查询select语句等价,过滤器像wherelimit子句 接下来主要讨论如下知识点...()、exclude()、get()的参数 语法:属性名称__比较运算符=值 表示两个下划线,左侧是属性名称,右侧是比较类型 对于使用“属性名_id”表示的原始值 转义:like语句中使用了%...=1)) Q对象 过滤器的方法中关键字参数查询,会合并为And进行 需要进行or查询使用Q()对象 Q对象(django.db.models.Q)用于封装一组关键字参数,这些关键字参数与“比较运算符”...~(not)操作符在Q对象前表示取反 list.filter(~Q(pk__lt=6)) 可以使用&|~结合括号进行分组,构造做生意复杂的Q对象 过滤器函数可以传递一个或多个Q对象作为位置参数,如果有多个...Q对象,这些参数的逻辑为and 过滤器函数可以混合使用Q对象关键字参数,所有参数都将and在一起,Q对象必须位于关键字参数的前面 自连接 对于地区信息,属于一对多关系,使用一张表,存储所有的信息 类似的表结构还应用于分类信息

2.3K20

Flask数据库过滤器与查询

关系使用relationship()函数表示,使用类sqlalchemy.schema.ForeignKey来单独声明。...添加到address模型中person_id列被定义为,就是这个建立起了联系。传给db.ForeignKey()的参数’person_id’表明,这一列的值是person表中行的id值。...如果无法决定,你就要为db.relationship()提供额外参数,从而确定所用,常用的配置选项如下所示: backref:在关系的另一个模型中添加反向引用 primary join:明确指定两个模型之间使用的联结条件...都定义为单独的一对多关系,为了消除外之间的歧义,定义关系时必须选用可选参数foreign_keys指定。...User.query.all() 使用过滤器可以配置query对象进行更精确的数据库查询

6.8K10

MySQL数据库、数据表的基本操作及查询数据

其位置放置在定义完所有的主键之后 使用约束 用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个。...带 LIKE的字符匹配查询 LIKE关键字即是使用通配符来进行匹配查找。通配符是一种在SQL的 WHERE条件子句中拥有特殊意思的字符,可以 LIKE一起使用的通配符有 % _。...使用这种语法的时候,连接的条件使用 ON子句给出,而不是用 WHERE。 连接查询 LEFT JOIN左连接 返回包括左表中的所有记录右表中连接字段相等的记录。...RIGHT JOIN右连接 返回包括右表中的所有记录左表中连接字段相等的记录。 复合条件连接查询 复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果,使查询的结果更加准确。...带 EXISTS关键字的子查询 EXISTS关键字后面的参数是一个任一的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么 EXISTS的结果为 true,此时外层查询语句将进行查询

3K20

MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

排序字段列表 LIMIT 分页参数 接下来我们将一一讲解上述语法 基本查询: # 查询多个字段 SELECT 字段1,字段2,字段3,......非,不是 分组查询: 分组查询常常聚合函数一同使用,所以我们先来讲解一下聚合函数 介绍: 聚合函数是指将一列数据作为一个整体,进行纵向计算 语法: SELECT 聚合函数(字段列表) FROM 表名...:在分组之前进行过滤,被过滤掉的数据不参与分组 HAVING:在分组之后对结果进行过滤,可以对聚合函数进行过滤 注意: 执行顺序:WHERE > 聚合函数 > HAVING 分组之后,查询的字段一般为聚合函数分组字段...:在多的一方建立,指向一的一方的主键 多对多 关系:一个学生选择多个课程,一个课程有多个学生选择 实现:建立第三张中间表,中间表至少包含两个,分别关联两方主键 一对一 关系:一对一关系常用于单表内容过多...,进行拆分使用 实现:在任意一方加入,关联另外一方的主键,并且设置为唯一的(UNIQUE) 多表查询概述: 指从多张表中查询数据 当我们同时查询两张表时,会出现笛卡尔积现象,我们的目的就是消除多余的笛卡尔积

1.6K40

Mysql基础

因此尽量使用 SQL 语句来过滤不必要的数据,而不是传输所有的数据到客户端中然后由客户端进行过滤。...AND OR 用于连接多个过滤条件。优先处理 AND,当一个过滤表达式涉及到多个 AND OR 时,可以使用 () 来决定优先级,使得优先级关系更清晰。...比较 事务:InnoDB 是事务型的,可以使用 Commit Rollback 语句。 并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。 :InnoDB 支持。...、CHECK控制字段范围) 16 Mysql数据库引擎MyISAMInnoDB( MyISAM: 表锁、 不支持事务、 不支持、 全文索引、 快、内存利用低, InnoDB: 行锁、 事务...包括左连接、右连接连接) 22 查询语句有like(尽量避免%XXX%,用不到索引,%在前面不能用到索引,如%ABC不能用索引,而ABC%能用索引 ps:这里感谢大佬@Apiao 大佬指出错误

1.8K00

Python Web - Flask笔记6

ORM关系以及一对多: mysql级别的,还不够ORM,必须拿到一个表的,然后通过这个再去另外一张表中查找,这样太麻烦了。...这样就可以对这个对象再进行一层过滤排序等操作。 通过lazy='dynamic',获取出来的多的那一部分的数据,就是一个AppenderQuery对象了。...这种对象既可以添加新数据,也可以跟Query一样,可以再进行一层过滤。 总而言之一句话:如果你在获取数据的时候,想要对数据再进行一层过滤时,可以考虑使用lazy='dynamic'。...在写join的时候,如果不写join的条件,那么默认将使用来作为条件连接。 query查找出来什么值,不会取决于join后面的东西,而是取决于query方法中传了什么参数。...不用写多个sql语句就可以实现一些复杂的查询。那么在sqlalchemy中,要实现一个子查询,应该使用以下几个步骤: 1.

1.9K10

如何用外部程序优化SQL语句中的INEXISTS

集算器实现: 如果 A1 的元素数量特别多,则可以使用哈希连接的方法来过滤,把第 3 行代码替换如下: IN子查询查询选出字段是主键 SQL 示例(2): select PS_SUPPKEY...,然后外层表与先读入的内存表(子查询)做哈希连接进行过滤。...集算器提供了 switch@i()、join@i() 两个函数用来做哈希连接过滤,switch 是式连接,用来把字段变成指引字段,这样就可以通过字段直接引用指向表的字段,join 函数不会改变字段的值...,然后外层表与先读入的内存表(子查询)做哈希连接进行过滤。...集算器提供了 switch@i()、join@i() 两个函数用来做哈希连接过滤,switch 是式连接,用来把字段变成指引字段,这样就可以通过字段直接引用指向表的字段,join 函数不会改变字段的值

97410

Mysql基础

因此尽量使用 SQL 语句来过滤不必要的数据,而不是传输所有的数据到客户端中然后由客户端进行过滤。...AND OR 用于连接多个过滤条件。优先处理 AND,当一个过滤表达式涉及到多个 AND OR 时,可以使用 () 来决定优先级,使得优先级关系更清晰。...比较 事务:InnoDB 是事务型的,可以使用 Commit Rollback 语句。 并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。 :InnoDB 支持。...、CHECK控制字段范围) 16 Mysql数据库引擎MyISAMInnoDB( MyISAM: 表锁、 不支持事务、 不支持、 全文索引、 快、内存利用低, InnoDB: 行锁、 事务...包括左连接、右连接连接) 22 查询语句有like(尽量避免%XXX%,用不到索引,%在前面不能用到索引,如%ABC不能用索引,而ABC%能用索引 ps:这里感谢大佬@Apiao 大佬指出错误

1.5K00

PostgreSQL 教程

PostgreSQL 基础教程 首先,您将学习如何使用基本数据查询技术从单个表中查询数据,包括查询数据、对结果集进行排序过滤行。然后,您将了解高级查询,例如连接多个表、使用集合操作以及构造子查询。...去重查询 为您提供一个删除结果集中重复行的子句。 第 2 节. 过滤数据 主题 描述 WHERE 根据指定条件过滤行。 LIMIT 获取查询生成的行的子集。 FETCH 限制查询返回的行数。...自连接 通过将表与自身进行比较来将表与其自身连接。 完全连接 使用完全连接查找一个表中在另一个表中没有匹配行的行。 交叉连接 生成两个或多个表中的行的笛卡尔积。... 展示如何在创建新表时定义约束或为现有表添加约束。 检查约束 添加逻辑以基于布尔表达式检查值。 唯一约束 确保一列或一组列中的值在整个表中是唯一的。...条件表达式运算符 主题 描述 CASE 向您展示如何使用CASE表达式构成条件查询。 COALESCE 返回第一个非空参数。您可以使用它将NULL替换为一个默认值。

44810

【自然框架】之通用权限(四):角色表组

如果他正向角色关联,则说明可以使用这个按钮,如果拒绝角色关联则说明不能使用这个节点。... Kind 类型 int 4 1 0 1:列表;2:表单;3:查询 ColumnIDs 字段ID nvarchar 200 _ 0       四、Role_RoleUser,角色里的用户,... 2、一个资源方案只能给一个控件使用。  3、一个功能节点里面有查询表单,而一个表单(查询)里面有可能有多个下拉列表框。...这是一个关联表,把角色、资源方案关联起来,由于一个角色里面会有多个功能节点,一个功能节点可能有多种方案(但是只能选一个),有一个表单、有一个查询,而表单查询里面会有多个下拉列表框这一类的控件, 所以在关联的时候是角色功能节点做联合主键的作用...1 0 ListCaseID 列表过滤方案 int 4 1 0 ,给分页控件的查询条件用 ControlCaseID 控件过滤方案 nvarchar 200 _ 0 1,2,3的形式,下拉列表框级别的控件用

1.6K80

MySQL-多表操作

除此之外,若要对联合查询的记录进行排序等操作,需要使用圆括号“()”包裹每- -个SELECT语句,在SELECT语句内或在联合查询的最后添加ORDER BY语句。...因此,在应用连接时仅调整关键字(LEFT或RIGHT JOIN) 主从表的位置,即可实现左连接右连接的互换使用。...➢当遇到同一个SQL语句中含有多层子查询时,它们执行的顺序是从最里层的子查询开始执行。 子查询分类 子查询的划分方式有多种,最常见的是以功能位置进行划分。...当数据源是子查询时必须为其设置别名,同时也是为了将查询结果作为一个表使用时,可以进行条件判断、分组、排序以及限量等操作。 ?...index_ name也是可选参数,表示索引名称,如果省略,MySQL也 会在建立时自动创建一个索引, 加快查询速度。

3.1K20

浅谈Django QuerySet对象(模型.objects)的常用方法

只有一个author属性连接的一个. author__name是book下的author属性下的name,即book这个表通过访问到author这个表中的name值。...(即只能在一对多模型上,不能多对一,多对多等),比如我们只在Book设置了authorpublisher。...那么select_related里面只能传如这两个参数,而不能传入别的参数,如BookOrder,因为我们是在BookOrder中设置的连接到Book,并没有在Book中设置连接到BookOrder...9. prefetch_related: 这个方法select_related非常的类似,就是在访问多个表中的数据的时候,减少查询的次数。这个方法是为了解决多对一多对多的关系的查询问题。...所以能使用select_related方法的话就是用这个方法。但是这两种方法的执行效率都比传统的方法执行效率高。传统的方法就是先返回book对象,再通过book去查询对应的的相关信息。

3.4K20

JavaWeb06-MySQL深入学习这些就够了!

约束特性如下: 必须是另一表主键的值; 可以重复; 可以为null; 一张表中可以有多个。 表之间关联关系 1....内连接基于连接谓词将两张表(如 A B)的列组合在一起,产生新的结果表。查询会将 A 表的每一行 B 表的每一行进行比较,并找出满足连接谓词的组合。...这样就构成了一个"交叉连接",WHERE 语句可能放置一些过滤谓词(过滤条件)。那些过滤谓词在功能上等价于显式连接符号. 常见的内连接有相等连接交叉连接. 1....隐式内连接 我们在实际开发中,它的使用频率是最高的,其实就是将inner join省略,也不在使用on进行条件过滤,而是直接使用where进行过滤。...连接可依据连接表保留左表, 右表或全部表的行而进一步分为左连接, 右连接全连接. 注意:mysql只支持左连接与右连接,而不支持全连接。 1.

1.3K60

六年开发经验,整理Mysql数据库技巧笔记,全网最详细的笔记集合!

where是在分组进行过滤, having是在分组后对数据进行过滤。...KEY 键名; 建表后单独添加约束 ALTER TABLE 表名 ADD CONSTRAINT 键名 FOREIGN KEY (本表列名) REFERENCES 主表名(主键列名); 的级联更新和级联删除...MyISAM 存储引擎:访问快,不支持事务操作。使用场景:以查询操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高!...InnoDB 存储引擎:支持事务操作,支持并发控制,占用磁盘空间大。(MySQL 5.5版本后默认) 使用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作!...联合索引:顾名思义,就是将单列索引进行组合。 索引:只有 InnoDB 引擎支持索引,用来保证数据的一致性、完整性实现级联操作。 全文索引:快速匹配全部文档的方式。

1.4K20

sql语言总结合集

DQL3-排序查询 对数据按一定规则进行排序操作,使用order by 子句 Select * form 表【where 子句】 order by 字段[asc|desc] Order  by 必须出现在...部门员工:一个部门下可以有多个员工,一个员工只能属于某一个部门。 多对多: 学生课程:一个学生可以选择多门课程,一门课程可以被多个学生选择。...订单商品:一个订单中包含多个商品,一个商品也可以出现多个订单中。 一对一: 公司与地址,一个公司只能有一个注册地址,一个地址也只能被一个公司注册。...关联的话,如果主表中的数据,从表用了的,就删除不了、 代码大杂烩,按照DDL DML TCL DQL DCL顺序进行 数据定义语言DDL CREATE,ALTER,DROP -- 一、数据库相关的DDL...(3)WHERE是在查询表时逐行过滤以选取满足条件的记录 (4)having是在数据查询后并且分完组后对分组进行过滤的 (5)HAVING必须跟在group BY 后 (6)查询语句执行顺序:5select

62830

Laravel Eloquent 模型关联关系(下)

今天我们将在定义好模型关联的基础上进行关联查询、插入更新操作,看看如何借助模型关联提高代码的可读性并提高编码效率。...=> mt_rand(1, 15)], ['content' => $faker->paragraph, 'user_id' => mt_rand(1, 15)] ]); 更新一对多所属模型字段...如果是要更新新创建的模型实例所属模型(父模型)的字段,比如以 posts 表为例,新增的记录想要更新 user_id 字段,可以这么实现: $user = User::findOrFail(1);...空对象模型 如果字段 user_id 允许为空的话,当我们访问 Post 模型上的 author 属性时,默认返回为 null。...,主要包含两种方式:懒惰式加载渴求式加载; 基于关联查询构架复杂查询查询结果进行过滤; 关联模型的更新、插入删除操作。

19.5K30

嘎嘎基础的JavaWeb(中)

from tb_emp group by gender;where 与 having 区别:执行时机不同:where 是分组之前进行过滤,不满足 where 条件,不参与分组;而 having 是分组之后对结果进行过滤...判断条件不同:where 不能对聚合函数进行判断,而 having 可以。注意事项:分组之后,查询的字段一般为聚合函数分组字段,查询其他字段无任何意义。...[else result] end -- 类似于switch语句9.4 多表设计物理:概念:使用foreign key定义关联另外一张表。...键名称 foreign key (字段名) references 主表(字段名);逻辑:概念:在业务逻辑中,解决关联通过逻辑,就可以很方便的解决上述问题一对多:在多的一方添加关联一的一方的主键...:一个 web 应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序登录校验步骤:获取请求url判断请求url中是否包含

22300

数据库MongoDB-索引

语法格式:db.COLLECTION_NAME.createIndex({创建索引的:排序规则,…},{创建索引的参数(可选参数)}) 参数说明 ?...语法格式:db.COLLECTION_NAME.totalIndexSize([detail](可选参数)) 参数解释:detail可选参数,传入除0或false的任意数据,那么会显示该集合中每个索引的大小及集合中索引的总大小...查询时只按照这个属性作为条件进行查询。 交叉索引 所谓交叉索引就是为一个集合的多个字段分别建立索引,在查询的时候通过多个字段作为查询条件,这种情况称为交叉索引。...在查询文档时,在查询条件中包含一个交叉索引或者在一次查询使用多个交叉索引作为查询条件都会触发交叉索引。 给集合中多个属性创建索引,查询时这些属性中全部或一部分作为条件。...,在使用时,当查询使用多个字段的时候,尽量使用复合索引,而不是交叉索引。

6K40

MongoDB查询(基本查询条件操作符介绍)

简介 MongoDB中使用find函数来进行查询查询最终返回的是一个集合中文档的子集,子集合包括0个文档到这个集合中所有的文档。...综上,我们总结一下如果需要使用第二个参数,则使用的技巧为:指明所有需要得到的的值为非0的数字,如果还要过滤"_id",则再指明"_id"这个键值为0即可。...---- 【查询条件】 上面提到的查询条件,都是精确匹配,即“=”多少。MongoDB中的查询显然还有更复杂的匹配。比如范围,OR子句取反等。我们分别进行介绍。...将他们组合应用,就可以查询值在某个范围内的文档了,比如我们要查询18-30岁(含)的所有用户: ? 这种范围查询操作符,除用在值为数字的之上,对于值为日期的的范围匹配也尤为好用!...---- 【OR查询】 MongoDB中有两种方式进行OR查询:“$in”可以用来查询一个多个值,“$or”则更通用一些,可以用来完成多个键值对的组合。

2.5K30

MySQL 查询专题

因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有 NULL 的行。 计算次序 WHERE 可包含任意数目的 AND OR 操作符。允许两者结合以进行复杂高级的过滤。...唯一的差别是,WHERE 过滤行,而 HAVING 过滤分组。 HAVING WHERE 的差别 这里有另一种理解方法,WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行过滤。...企图检索多个列将返回错误。 tip: 逐渐增加子查询来建立查询 用子查询测试调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。...用子查询建立(测试)查询的最可靠的方法是逐渐进行,这与 MySQL 处理它们的方法非常相同。首先,建立测试最内层的查询。然后,用硬编码数据建立测试外层查询,并且仅在确认它正常后才嵌入子查询。...一对一关系 (夫妻关系) 从表的主键即是 一对多关系(部门职员的关系) 从表有一个作为 多对多(学生老师关系) 需要一个中间表, 然后指定两个 一般主表的记录数会少.

5K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券