You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF ReadOnlyModelViewSet多斜杠lookup_field兼容detail action问题咨询

DRF多斜杠lookup字段兼容detail action路由配置方案

直接在你的Test视图集中新增lookup_value_regex属性配置即可:

class Test(ReadOnlyModelViewSet):
    queryset = Test.objects.all()
    lookup_field = 'art'
    # 新增该行配置
    lookup_value_regex = r'.*?(?=\/chars|$)'
    serializer_class = TestSerializer

    @action(methods=['GET'], detail=True)
    def chars(self, request, art):
        # 原有业务逻辑
        ...

正则匹配逻辑说明

  • .*?采用非贪婪模式匹配任意字符,避免一次性吞噬所有后续路径段
  • 正向零宽断言(?=\/chars|$)限制匹配终止位置:要么是/chars路径段的起始位置,要么是整个请求路径的末尾
  • 既不会把/chars后缀计入art字段的取值,也不会在无后缀的资源详情路径下出现匹配失败问题

路由无需做额外修改,保持原有SimpleRouter注册逻辑即可正常覆盖所有需求场景:

  • /api/test/first_product/test:匹配到路径末尾,art取值为first_product/test,命中资源详情接口
  • /api/test/first_product/test/chars:匹配到/chars前的位置,art取值为first_product/test,剩余路径命中chars action接口
  • 单级art取值(如second_product)的两类路径也完全符合匹配规则

如果后续新增其他detail类型的action,只需要在正则的预查条件中新增对应路径段即可,例如新增info action后,正则修改为r'.*?(?=\/(chars|info)|$)'即可同时兼容所有detail action。

内容的提问来源于stack exchange,提问作者Антон Бондарь

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:24:08