# -*- coding: utf-8 -*- """ @Remark: 角色管理 """ from rest_framework import serializers from mysystem.models import Dept from utils.jsonResponse import SuccessResponse from utils.serializers import CustomModelSerializer from utils.viewset import CustomModelViewSet class DeptSerializer(CustomModelSerializer): """ 部门-序列化器 """ parent_name = serializers.CharField(read_only=True, source='parent.name') status_name = serializers.SerializerMethodField() hasChildren = serializers.SerializerMethodField() def get_hasChildren(self, obj): return Dept.objects.filter(parent=obj.id).exists() def get_status_name(self, obj: Dept): if obj.status: return "启用" return "禁用" class Meta: model = Dept fields = "__all__" read_only_fields = ["id"] class DeptCreateUpdateSerializer(CustomModelSerializer): """ 部门管理 创建/更新时的列化器 """ def create(self, validated_data): """ 默认部门dept_belong_id数据归属为当前部门 """ instance = super().create(validated_data) instance.dept_belong_id = instance.id instance.save() return instance class Meta: model = Dept fields = '__all__' class DeptTreeSerializer(CustomModelSerializer): """ 部门表的树形序列化器 """ children = serializers.SerializerMethodField(read_only=True) def get_children(self, instance): queryset = Dept.objects.filter(parent=instance.id).filter(status=1) if queryset: serializer = DeptTreeSerializer(queryset, many=True) return serializer.data else: return None class Meta: model = Dept fields = "__all__" read_only_fields = ["id"] class DeptViewSet(CustomModelViewSet): """ 部门管理接口: """ queryset = Dept.objects.all() serializer_class = DeptSerializer create_serializer_class = DeptCreateUpdateSerializer update_serializer_class = DeptCreateUpdateSerializer filterset_fields = ['status'] search_fields = ['name', 'owner','phone','email'] def list(self, request, *args, **kwargs): """ 去除分页功能 改造可懒加载,懒加载默认只返回父级 """ params = request.query_params parent = params.get('parent', None) lazy = params.get('lazy', None) search = params.get('search', None) queryset = self.filter_queryset(self.get_queryset()) if lazy: if not search: if parent: queryset = queryset.filter(parent=parent) else: queryset = queryset.filter(parent__isnull=True) else: if parent: queryset = queryset.filter(parent=parent) serializer = self.get_serializer(queryset, many=True, request=request) return SuccessResponse(data=serializer.data, msg="获取成功") def dept_tree(self, request): queryset = Dept.objects.exclude(status=0).filter(parent=None) serializer = DeptTreeSerializer(queryset, many=True) return SuccessResponse(data=serializer.data, msg="获取成功")