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

DRF中如何仅重写RetrieveUpdateAPIView无需PK参数的逻辑

优化DRF中RetrieveUpdateAPIView的实现,避免全量重写方法

当前代码通过完全重写retrieve和update方法,实现了无需PK参数、基于当前登录用户获取员工数据的逻辑。但实际上可以通过重写get_object方法来复用父类的核心逻辑,无需全量重写两个方法。

优化后的代码实现

View.py

from rest_framework import generics
from .models import Employee
from .serializers import EmployeeSerializers
from .permissions import EmployeePermission

class EmployeeView(generics.RetrieveUpdateAPIView):
    permission_classes = [EmployeePermission]
    serializer_class = EmployeeSerializers

    def get_object(self):
        # 重写get_object,返回当前登录用户对应的Employee实例
        return Employee.objects.get(user=self.request.user)

urls.py

无需修改,保持原有配置即可:

path('viewEmployee/', views.EmployeeView.as_view()),

方案说明

  • RetrieveUpdateAPIView的retrieve和update方法都会调用get_object来获取操作实例,因此仅重写get_object就能替换掉需要PK参数的逻辑,让父类方法自动使用当前用户对应的员工数据
  • 复用父类内置的序列化验证、响应处理逻辑,比如update方法中自动处理序列化器的验证、保存及返回响应,减少重复代码
  • 代码更简洁,符合DRY(Don't Repeat Yourself)原则

内容的提问来源于stack exchange,提问作者Khawaja Ali Hassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:45:50