【效能平台】项目模块——增删改查操作(四)

一、获取项目列表数据

在这里插入图片描述
在这里插入图片描述

二、新增项目

在这里插入图片描述

三、获取项目详情信息

在这里插入图片描述

根据需求:获取的字段有项目序号、项目名称、项目负责人、应用名称、测试人员、创建时间、接口数、套件数、用例数、配置数

serializers.py:序列化操作

class ProjectsModelSerializer(serializers.ModelSerializer):
	class Meta:
		model=Projects
		exclude=['update_time']
		
		extra_kwargs={
    
    
			"create_time":{
    
    
				"read_only":True
				}
		}
	
	
	def create(self,validated_data):
		instance=super().create(validated_data)
		Configures.objects.create(project=instance)
		return instance

class ProjectsNamesSerializer(serializers.ModelSerializer):
	class Meta:
		model=Projects
		fields=['id','name']


class InterfacesModelSerializer(serializers.ModelSerializer):
	class Meta:
		model=Interfaces
		fields=['id','name']

class ProjectsInterfacesSerializer(serializers.Modelserializer):
	interfaces=InterfacesModelSerializer(label='项目所属接口',help_text='项目所属接口',many=True,read_only=True)
	class Meta:
		model=Projects
		fields=['interfaces']

视图类

class ProjectsViewSet(viewsets.ModelViewSet):
	queryset=Projects.objects.all()
	serializer_class=ProjectsModelSerializer
	pagination_class = PageNumberPagination
    permission_classes = [permissions.IsAuthenticated]
	
	def list(self,request,*args,**kwargs):
		response=super().list(request,*args,**kwargs)
		for item in response.data['results']:
			item['interfaces']=Interfaces.objects.filter(project_id=item['id']).count()
			item['testsuits']=Testsuits.objects.filter(project_id=item['id']).count()
			item['testcases']=Testcases.objects.filter(interface__project_id=item['id']).count()
			item['configures']=Configures.objects.filter(interface__project_id__exact=item['id']).count()
		return response
			
	
	@action(methods=['GET'],detail=False)
	def names(self,request,*args,**kwargs)
		response=super().list(request,*args,**kwargs)
		return response
	
	@action(methods=['GET'],detail=True)
	def interfaces(self,request,*args,**kwargs)
		response=super().retrieve(request,*args,**kwargs)
		response.data=response.data['interfaces']
		return response
	
	def get_serializer_class():
		if self.action=='names':
			return ProjectsNamesSerializer
		elif self.action=='interfaces':
			return ProjectsInterfacesSerializer
		else:
			return super().get_serializer_class()
			
	def paginate_queryset(self, queryset):
        if self.action == 'names':
            return
        else:
            return super().paginate_queryset(queryset)

定义路由:

router=routers.SimpleRouter()
router.register(r'Projects',ProjectsViewSet)
urlpatterns=[
	path('',include(router.urls))
]

重点:

class InterfacesModelSerializer(serializers.ModelSerializer):
	class Meta:
		model=Interfaces
		fields=['id','name']

class ProjectsInterfacesSerializer(serializers.Modelserializer):
	interfaces=InterfacesModelSerializer(label='项目所属接口',help_text='项目所属接口',many=True,read_only=True)
	class Meta:
		model=Projects
		fields=['interfaces']
	@action(methods=['GET'],detail=True)
	def interfaces(self,request,*args,**kwargs)
		response=super().retrieve(request,*args,**kwargs)
		response.data=response.data['interfaces']
		return response
	def list(self,request,*args,**kwargs):
		response=super().list(request,*args,**kwargs)
		for item in response.data['results']:
			item['interfaces']=Interfaces.objects.filter(project_id=item['id']).count()
			item['testsuits']=Testsuits.objects.filter(project_id=item['id']).count()
			item['testcases']=Testcases.objects.filter(interface__project_id=item['id']).count()
			item['configures']=Configures.objects.filter(interface__project_id__exact=item['id']).count()
		return response

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/124908547
今日推荐