58 lines
2.5 KiB
Python
58 lines
2.5 KiB
Python
from django.shortcuts import render
|
|
from rest_framework.viewsets import ModelViewSet
|
|
from .models import Standard, UnitType, ImplementRule
|
|
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer, ImplementRuleListSerializer
|
|
# Create your views here.
|
|
|
|
class StandardViewSet(ModelViewSet):
|
|
perms_map = {'get': '*', 'post': 'standard_create',
|
|
'put': 'standard_update', 'delete': 'standard_delete'}
|
|
queryset = Standard.objects
|
|
serializer_class = StandardSerializer
|
|
search_fields = ['name', 'code', 'status', 'implement_date']
|
|
filterset_fields = ['status']
|
|
ordering = ['-create_time']
|
|
|
|
class ImplementRuleViewSet(ModelViewSet):
|
|
perms_map = {'get': '*', 'post': 'implementrule_create',
|
|
'put': 'implementrule_update', 'delete': 'implementrule_delete'}
|
|
queryset = ImplementRule.objects
|
|
serializer_class = ImplementRuleSerializer
|
|
search_fields = ['name', 'code', 'cert_type']
|
|
filterset_fields = ['pv_scope', 'cert_type']
|
|
ordering = ['-create_time']
|
|
|
|
def get_serializer_class(self):
|
|
# 根据请求类型动态变更serializer
|
|
if self.action == 'list':
|
|
return ImplementRuleListSerializer
|
|
return ImplementRuleSerializer
|
|
|
|
def get_queryset(self):
|
|
queryset = self.queryset
|
|
if hasattr(self.get_serializer_class(), 'setup_eager_loading'):
|
|
queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化
|
|
return queryset
|
|
|
|
class UnitTypedViewSet(ModelViewSet):
|
|
perms_map = {'get': '*', 'post': 'unittype_create',
|
|
'put': 'unittype_update', 'delete': 'unittype_delete'}
|
|
queryset = UnitType.objects
|
|
serializer_class = UnitTypeSerializer
|
|
search_fields = ['name']
|
|
filterset_fields = ['name','implementrule']
|
|
ordering = ['-create_time']
|
|
|
|
def paginate_queryset(self, queryset):
|
|
"""
|
|
如果查询参数里没有page且含有参数implementrule则不分页,否则请求分页
|
|
"""
|
|
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('implementrule', None))) or (self.paginator is None):
|
|
return None
|
|
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
|
|
|
def get_queryset(self):
|
|
queryset = self.queryset
|
|
if hasattr(self.get_serializer_class(), 'setup_eager_loading'):
|
|
queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化
|
|
return queryset |