一、获取项目列表数据
二、新增项目
三、获取项目详情信息
根据需求:获取的字段有项目序号、项目名称、项目负责人、应用名称、测试人员、创建时间、接口数、套件数、用例数、配置数
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