79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
import logging
|
|
|
|
from rest_framework.decorators import action
|
|
from rest_framework.viewsets import ModelViewSet
|
|
from rest_framework import permissions
|
|
from .models import Projects
|
|
from . import serializers
|
|
from rest_framework import filters
|
|
from interfaces.models import Interfaces
|
|
from testcases.models import TestCases
|
|
from testsuites.models import TestSuites
|
|
from configures.models import Configures
|
|
from utils.mixins import GetDataMinxin
|
|
|
|
|
|
logger = logging.getLogger("mytest")
|
|
|
|
|
|
class ProjectViewSet(ModelViewSet, GetDataMinxin):
|
|
queryset = Projects.objects.all()
|
|
serializer_class = serializers.ProjectModelSerializer
|
|
filter_backends = [filters.SearchFilter, filters.OrderingFilter]
|
|
search_fields = ['id', 'name', 'leader']
|
|
ordering_fields = ['name', 'leader']
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
response = super().list(request, *args, **kwargs)
|
|
for item in response.data["results"]:
|
|
interfaces = Interfaces.objects.filter(project_id=item["id"])
|
|
item["interfaces"] = interfaces.count()
|
|
item["testsuits"] = TestSuites.objects.filter(project_id=item["id"]).count()
|
|
# ---------------------- 方式一 ----------------------
|
|
# item["testcases"] = 0
|
|
# item["configures"] = 0
|
|
# for interface in interfaces:
|
|
# item["testcases"] += TestCases.objects.filter(interface_id=interface.id).count()
|
|
# item["configures"] += Configures.objects.filter(interface_id=interface.id).count()
|
|
# ---------------------- 方式二 ----------------------
|
|
item["testcases"] = TestCases.objects.filter(interface__project_id=item["id"]).count()
|
|
item["configures"] = Configures.objects.filter(interface__project_id=item["id"]).count()
|
|
|
|
return response
|
|
|
|
@action(detail=False)
|
|
def names(self, request, *args, **kwargs):
|
|
"""获取所有项目的名称"""
|
|
response = super().list(request, *args, **kwargs)
|
|
return response
|
|
|
|
@action(detail=True)
|
|
def interfaces(self, request, *args, **kwargs):
|
|
"""获取项目下的接口信息"""
|
|
# response = self.retrieve(request, *args, **kwargs)
|
|
# response.data = response.data.get('interfaces')
|
|
# logger.error(response.data)
|
|
# return response
|
|
return self.get_data_by_ation(request, *args, **kwargs)
|
|
|
|
def get_serializer_class(self):
|
|
if self.action == "names":
|
|
return serializers.NamesProjectSerializer
|
|
elif self.action == "interfaces":
|
|
return serializers.InterfacesProjectSerializer
|
|
else:
|
|
return super().get_serializer_class()
|
|
|
|
def filter_queryset(self, queryset):
|
|
if self.action == "names":
|
|
return queryset
|
|
else:
|
|
return super().filter_queryset(queryset)
|
|
|
|
def paginate_queryset(self, queryset):
|
|
if self.action == "names":
|
|
return
|
|
else:
|
|
return super().paginate_queryset(queryset)
|