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

DRF中如何将workshop_id改为URL路径参数并实现客户列表过滤?

将DRF的查询参数改为路径参数实现车间客户列表过滤

一、修改URL路径配置

把原URL路径调整为带路径参数的形式,指定参数类型为整数(确保传入有效ID):

path('<int:workshop_id>/customer-list/', views.CustomerList.as_view(), name='customer_list'),

调整后访问的URL格式为 http://localhost:8000/1/customer-list/,其中1为目标车间ID。

二、修改视图类代码

DRF类视图中,路径参数会被自动解析到self.kwargs字典中,需调整workshop_id的获取方式及过滤逻辑:

from rest_framework import status
from rest_framework.response import Response
from rest_framework.generics import ListAPIView
from .models import Customer
from .serializers import CustomerSerializer

class CustomerList(ListAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer
    filter_backends = [SearchFilter]
    search_fields = ['customer_name']
    
    def filter_queryset(self, queryset):
        # 从kwargs中获取路径参数workshop_id
        workshop_id = self.kwargs.get('workshop_id')
        queryset = queryset.filter(workshop_id=workshop_id)
        return super().filter_queryset(queryset)
    
    def list(self, request, *args, **kwargs):
        # 路径参数是URL必填部分,缺失会直接匹配不到视图,无需额外校验
        return super(CustomerList, self).list(request, *args, **kwargs)

补充说明

  1. 路径参数<int:workshop_id>由Django路由自动校验类型,若传入非整数内容会直接返回404错误,省去手动校验参数有效性的步骤。
  2. 路径参数属于URL的必填组成部分,不存在缺失场景,因此原list方法中的参数缺失校验逻辑可以直接移除。

内容的提问来源于stack exchange,提问作者Salman Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:30:59