You need to enable JavaScript to run this app. Django REST框架如何通过URL携带的ticket_id字段过滤TicketMessage数据
优惠活动
大模型
产品
解决方案
定价
更多

Django REST框架如何通过URL携带的ticket_id字段过滤TicketMessage数据

实现方案

调整视图代码

你当前使用的generics.RetrieveAPIView是单条资源查询视图,要返回指定工单的消息列表,需要改为继承generics.ListAPIView,同时重写get_queryset方法实现按URL传入的ticket_id过滤:

class TicketMessageSerializerView(generics.ListAPIView):
    serializer_class = TicketMessageSerializer

    def get_queryset(self):
        # 读取路由传入的ticket_id参数
        ticket_id = self.kwargs["ticket_id"]
        # 过滤返回对应工单的所有关联消息
        return TicketMessage.objects.filter(ticket_id=ticket_id)

路由无需修改

现有路由已经正确配置了ticket_id路径参数,直接复用即可:

path('api/tickets/<int:ticket_id>/messages/',
      views.TicketMessageSerializerView.as_view()),

可选优化(推荐)

如果需要校验对应工单是否存在,不存在时直接返回404,可以调整get_queryset逻辑如下:

from django.shortcuts import get_object_or_404
from .models import Ticket

class TicketMessageSerializerView(generics.ListAPIView):
    serializer_class = TicketMessageSerializer

    def get_queryset(self):
        ticket_id = self.kwargs["ticket_id"]
        # 先校验工单是否存在
        get_object_or_404(Ticket, id=ticket_id)
        return TicketMessage.objects.filter(ticket_id=ticket_id)

内容的提问来源于stack exchange,提问作者Konstantin Skokov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:57:03