Django中嵌套序列化器场景下如何通过URL参数过滤嵌套数据?
DRF嵌套关联数据查询实现方法
你可以通过Django Filter原生支持的跨关联查询语法实现嵌套字段过滤,操作步骤如下:
- 第一步:修改视图过滤配置
Django FilterBackend默认支持用双下划线__语法跨外键关联查询嵌套字段,你只需要在filterset_fields中追加关联模型的对应字段即可。如果要根据assignParameter的parameterName过滤关联的Robot数据,修改后的视图代码如下:
class RobotViewSet(mixins.ListModelMixin,GenericViewSet): queryset = Robot.objects.all() serializer_class = RobotSerializer filter_backends = [DjangoFilterBackend] # param是Robot模型里assignParameter外键设置的related_name,后面跟关联表的字段名 filterset_fields = ['robot', 'param__parameterName'] authentication_classes = [BasicAuthentication] permission_classes = [IsAuthenticated]
- 第二步:构造查询URL
配置完成后,直接通过如下格式的URL发起请求即可查询匹配嵌套参数的Robot数据:接口地址/?param__parameterName=你要查询的参数名
如果需要同时匹配机器人名称和嵌套参数,直接拼接查询参数即可:接口地址/?robot=robotname¶m__parameterName=你要查询的参数名
补充说明:你现有序列化器代码中引用的jenkinsHistorySerializer未定义,属于笔误,不影响本次嵌套过滤的逻辑,按需补全对应序列化类即可。如果需要实现模糊匹配、范围查询等更复杂的过滤规则,可以自定义FilterSet类替代默认的filterset_fields配置,获得更灵活的查询能力。
内容的提问来源于stack exchange,提问作者Rituparna Das
相关产品推荐
相关产品推荐

