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

Django REST Framework如何配置urlpattern处理外键关联资源更新请求

Django REST Framework外键关联资源路由配置方案

第一步:补充ProjectMaterial详情视图

你当前仅实现了ProjectMaterial的列表视图,要实现单条资源的PUT更新,需要新增详情视图,同时重写查询集方法保证操作的是对应项目下的关联资源,修改views.py代码如下:

from rest_framework import generics
from .models import Project, ProjectMaterial
from .serializers import ProjectSerializer, ProjectMaterialSerializer

# 原有视图保持不变
class ProjectList(generics.ListCreateAPIView):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer

class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer

class ProjectMaterialList(generics.ListCreateAPIView):
    serializer_class = ProjectMaterialSerializer
    # 重写查询集,过滤当前项目下的所有材料
    def get_queryset(self):
        return ProjectMaterial.objects.filter(project_id=self.kwargs['project_pk'])

# 新增ProjectMaterial详情视图
class ProjectMaterialDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = ProjectMaterialSerializer
    # 重写查询集,确保只操作对应项目下的指定材料
    def get_queryset(self):
        return ProjectMaterial.objects.filter(project_id=self.kwargs['project_pk'])

第二步:配置urlpatterns

在你的urls.py中添加嵌套路由规则,示例如下:

from django.urls import path
from . import views

urlpatterns = [
    # 原有项目相关路由保持不变
    path('projects/', views.ProjectList.as_view(), name='project-list'),
    path('projects/<int:pk>/', views.ProjectDetail.as_view(), name='project-detail'),
    # 新增项目关联材料的嵌套路由
    path('projects/<int:project_pk>/materials/', views.ProjectMaterialList.as_view(), name='project-material-list'),
    path('projects/<int:project_pk>/materials/<int:pk>/', views.ProjectMaterialDetail.as_view(), name='project-material-detail'),
]

请求使用说明

配置完成后,你要修改id为1的Project下id为3的ProjectMaterial的units字段,直接发起PUT请求到地址/projects/1/materials/3/,请求体携带units的新值即可,接口会自动校验该材料是否属于指定项目,避免越权操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:24:03