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

Django框架中ModelViewSet的Get/Delete请求URL传ID问题求助

问题分析与修正方案

错误原因

  1. 方法签名不符合DRF规范:

    • get_queryset 方法的正确签名是 def get_queryset(self):,不需要额外传入mid参数;destroy方法的正确签名是 def destroy(self, request, *args, **kwargs):,错误的参数定义会导致请求时参数缺失报错。
    • DRF视图方法会通过self.kwargs自动获取URL中的路径参数,无需手动在方法参数中声明。
  2. URL路由配置错误:
    DRF的router会自动生成标准REST路由(列表路由/prefix/、详情路由/prefix/{pk}/),手动在router.register的路径中写正则捕获object_id会破坏router的默认路由规则,导致请求无法匹配到正确的视图方法,进而出现"Delete方法不被允许"的错误。

  3. 对ModelViewSet默认逻辑不熟悉:
    ModelViewSet已内置retrieve(处理单个对象GET请求)和destroy(处理单个对象DELETE请求)方法,无需自行重新实现展示/删除逻辑,只需确保queryset或get_queryset返回正确数据集即可。


修正后的代码实现

视图代码

from rest_framework import viewsets, permissions
from .models import ObjectModel  # 替换为你的实际模型类
from .serializers import ObjectSerializer

class DeleteOrShowView(viewsets.ModelViewSet):
    serializer_class = ObjectSerializer
    permission_classes = [permissions.IsAuthenticated]
    http_method_names = ['get', 'delete']  # 仅允许GET和DELETE请求
    queryset = ObjectModel.objects.all()  # 若需自定义过滤,可重写get_queryset

    # 可选:自定义查询集过滤(比如仅返回当前用户的对象)
    # def get_queryset(self):
    #     return self.queryset.filter(owner=self.request.user)

    # 可选:自定义删除逻辑(默认逻辑已能完成删除操作)
    # def destroy(self, request, *args, **kwargs):
    #     instance = self.get_object()
    #     # 此处可添加删除前的校验或额外操作
    #     self.perform_destroy(instance)
    #     return Response(status=status.HTTP_204_NO_CONTENT)

URL配置代码

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter()
# router自动生成路由:
# - 列表路由:/objects/(GET请求,返回所有对象,受http_method_names限制仅允许GET)
# - 详情路由:/objects/{pk}/(GET请求返回单个对象,DELETE请求删除该对象)
router.register('objects', views.DeleteOrShowView, basename='do_stuff')

urlpatterns = [
    path('', include(router.urls)),
]

验证方式

  • 发送GET /objects/1/(1为目标对象ID):返回对应ID的对象详情
  • 发送DELETE /objects/1/:删除对应ID的对象

此配置可正确从URL中获取ID并完成展示/删除操作,解决之前的参数缺失和方法不允许问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:00:55