from django.conf import settings from django.core.cache import cache from django.db.models import Count, Q from django.db.models.query import QuerySet from django.http import request from django.shortcuts import render from django.utils import timezone from rest_framework import status from rest_framework.decorators import action, permission_classes from rest_framework.exceptions import PermissionDenied, ParseError from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin from rest_framework.permissions import IsAdminUser from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet, ModelViewSet from utils.pagination import PageOrNot from apps.system.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin, OptimizationMixin from apps.system.models import Organization from apps.system.permission import get_permission_list, has_permission from apps.system.permission_data import RbacFilterSet from .models import * from .serializers import * # Create your views here. class RegulatoryViewSet(OptimizationMixin, PageOrNot, CreateUpdateModelAMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'regulatory_create', 'put': 'regulatory_update', 'delete': 'regulatory_delete'} queryset = Regulatory.objects.all() serializer_class = RegulatorySerializer ordering = ['-id'] search_fields = ['provinces'] ordering_fields = ['provinces'] filterset_fields = ['provinces'] class ProfessionalViewSet(OptimizationMixin, PageOrNot, CreateUpdateModelAMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'professional_create', 'put': 'professional_update', 'delete': 'professional_delete'} queryset = Professional.objects.all() serializer_class = ProfessionalSerializer ordering = ['-id'] class PolicyViewSet(OptimizationMixin, PageOrNot, CreateUpdateModelAMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'policy_create', 'put': 'policy_update', 'delete': 'policy_delete'} queryset = Policy.objects.all() serializer_class = PolicySerializer filterset_fields = ['cate', 'name', 'year', 'month'] search_fields = ['cate', 'name', 'description'] ordering = ['-id'] def can_view_top(self, user): if user.dept.type and user.dept.type.name == '部门': return True elif user.dept.name in ['福建分公司', '河南分公司']: return True return False def get_queryset(self): cate = self.request.query_params.get('cate', '') if cate: if cate == '总部文件': user = self.request.user if self.can_view_top(user): return Policy.objects.filter(cate=cate) else: return Policy.objects.none() else: if self.request.method == 'GET': raise ParseError('请提供cate查询条件') return super().get_queryset() class ValidationViewSet(OptimizationMixin, PageOrNot, CreateUpdateModelAMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'validation_create', 'put': 'policy_update', 'delete': 'validation_delete'} queryset = Validation.objects.all() serializer_class = ValidationSerializer ordering = ['-id'] search_fields = ['provinces'] ordering_fields = ['provinces'] filterset_fields = ['provinces']