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
相关产品推荐
相关产品推荐

