需求1:当访问项目的列表数据时:获取所有的字段;现在访问项目的列表数据时:只展示项目名称和项目负责人,并且不分页;
方法1:无过滤、排序、分页功能
@action(methods=['GET'],detail=False)
def names(self,request):
queryset=self.get_queryset()
list=[]
for query in queryset:
list.append({
'name':query.name,
'leader':query.leader
})
return Response(list)
方法2:无过滤、排序、分页功能
@action(methods=['GET'],detail=False)
def names(self,request):
queryset=self.get_queryset()
serializer=self.get_serializer(instance=queryset,many=True)
return Response(serializer.data)
def get_serializer_class(self):
if self.action=='names':
return ProjectsSerializer1
else:
return super().get_serializer_class()
方法3:有过滤、排序、分页功能
@action(methods=['GET'],detail=False)
def names(self,request):
return super().list(request)
def get_serializer_class(self):
if self.action=='names':
return ProjectsSerializer1
else:
return super().get_serializer_class()
重写paginate_queryset、filter_queryset方法,实现无分页和过滤功能
@action(methods=['GET'],detail=False)
def names(self,request):
return super().list(request)
def get_serializer_class(self):
if self.action=='names':
return ProjectsSerializer1
else:
return super().get_serializer_class()
def paginate_queryset(self, queryset):
if self.action=='names':
return
else:
return super().paginate_queryset(queryset)
def filter_queryset(self, queryset):
if self.action=='names':
return self.queryset
else:
return super().filter_queryset(queryset)
需求2:当访问项目的列表数据时:获取所有的字段;当访问项目的详情数据时:只展示项目名称和项目负责人;
方法1
@action(methods=['GET'],detail=True)
def names1(self,request,pk):
object=self.get_object()
serializer=self.get_serializer(instance=object)
return Response(serializer.data)
def get_serializer_class(self):
if self.action=='names1':
return ProjectsSerializer1
else:
return super().get_serializer_class()
方法2
@action(methods=['GET'], detail=True)
def names1(self, request, pk):
return super().retrieve(request)
def get_serializer_class(self):
if self.action=='names1':
return ProjectsSerializer1
else:
return super().get_serializer_class()
需求3:当访问项目的列表数据时:获取所有的字段;现在访问项目的列表数据时:只展示项目名称和项目负责人,展示项目名称包括京东
@action(methods=['GET'],detail=False)
def names(self,request):
return super().list(request)
def get_serializer_class(self):
if self.action=='names':
return ProjectsSerializer1
if self.action=='names1':
return ProjectsSerializer1
else:
return super().get_serializer_class()
def get_queryset(self):
if self.action=='names':
return self.queryset.filter(name__contains='京东')
else:
return super().get_queryset()
todo 如何定义类视图?类视图的设计原则?
a、类视图尽量要简化
b、根据需求选择相应的父类视图
c、如果drf中的类视图有提供相应的逻辑,那么直接使用父类提供的
d、如果drf中的类视图,绝大多数逻辑都能满足需求,可以重写父类实现
e、如果drf中的类视图完全不满足要求,那么就直接自定义即可
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74049.html