| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 | from rest_framework import serializersfrom .models import ListModel, TypeListModel, Role, Permissionfrom utils import datasolveclass StaffGetSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=True, required=False)    staff_type = serializers.CharField(read_only=True, required=False)    check_code = serializers.IntegerField(read_only=True, required=False)    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    class Meta:        model = ListModel        exclude = ['openid', 'is_delete', ]        read_only_fields = ['id', ]class StaffPostSerializer(serializers.ModelSerializer):    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])    staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    check_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])    class Meta:        model = ListModel        exclude = ['is_delete', ]        read_only_fields = ['id', 'create_time', 'update_time', ]class StaffUpdateSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])       class Meta:        model = ListModel        exclude = ['openid', 'is_delete', ]        read_only_fields = ['id', 'create_time', 'update_time', 'appid']class StaffPartialUpdateSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])    staff_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])    class Meta:        model = ListModel        exclude = ['openid', 'is_delete', ]        read_only_fields = ['id', 'create_time', 'update_time', ]class FileRenderSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=False, required=False)    staff_type = serializers.CharField(read_only=False, required=False)    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    class Meta:        model = ListModel        ref_name = 'StaffFileRenderSerializer'        exclude = ['openid', 'is_delete', ]class StaffTypeGetSerializer(serializers.ModelSerializer):    staff_type = serializers.CharField(read_only=True, required=False)    creater = serializers.CharField(read_only=True, required=False)    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    class Meta:        model = TypeListModel        exclude = ['openid']        read_only_fields = ['id', ]class userStaffGetSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=True, required=False)    staff_type = serializers.CharField(read_only=True, required=False)    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    class Meta:        model = ListModel        exclude = ['openid', 'is_delete',  'check_code', ]        read_only_fields = ['id', ]class userStaffPostSerializer(serializers.ModelSerializer):    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])    staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    check_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])    class Meta:        model = ListModel        exclude = ['is_delete', ]        read_only_fields = ['id', 'create_time', 'update_time', ]class userStaffUpdateSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    class Meta:        model = ListModel        exclude = ['openid', 'is_delete', ]        read_only_fields = ['id', 'create_time', 'update_time','appid' ]class userStaffPartialUpdateSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])    staff_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])    class Meta:        model = ListModel        exclude = ['openid', 'is_delete', ]        read_only_fields = ['id', 'create_time', 'update_time', ]class userFileRenderSerializer(serializers.ModelSerializer):    staff_name = serializers.CharField(read_only=False, required=False)    staff_type = serializers.CharField(read_only=False, required=False)    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    class Meta:        model = ListModel        ref_name = 'StaffFileRenderSerializer'        exclude = ['openid', 'is_delete', ]class userStaffTypeGetSerializer(serializers.ModelSerializer):    staff_type = serializers.CharField(read_only=True, required=False)    creater = serializers.CharField(read_only=True, required=False)    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')    class Meta:        model = TypeListModel        exclude = ['openid']        read_only_fields = ['id', ]class RolePOSTSerializer(serializers.ModelSerializer):    name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])    description = serializers.CharField(read_only=False, required=False, allow_blank=True)    permissions = serializers.PrimaryKeyRelatedField(        many=True,        queryset=Permission.objects.all(),        required=False    )        class Meta:        model = Role        fields = ['id', 'name', 'description', 'permissions']        read_only_fields = ['id', ]class RoleGETSerializer(serializers.ModelSerializer):    permissions_group = serializers.SerializerMethodField()        class Meta:        model = Role        fields = ['id', 'name', 'description', 'permissions_group']        def get_permissions_group(self, obj):        # 获取角色关联的所有权限并预取数据        permissions = obj.permissions.all().order_by('page', 'component')                # 按page字段分组        grouped = {}        for perm in permissions:            page = perm.page            if page not in grouped:                grouped[page] = []            # 使用PermissionSerializer序列化每个权限对象            serializer = PermissionSerializer(perm)            grouped[page].append(serializer.data)                # 转换为前端需要的格式        return [{"page": page, "permissions": perms} for page, perms in grouped.items()]# 只返回page,不需要返回componet等详细信息class RolePageGETSerializer(serializers.ModelSerializer):    permissions_group = serializers.SerializerMethodField()        class Meta:        model = Role        fields = ['id', 'name', 'description', 'permissions_group']        def get_permissions_group(self, obj):        # 获取角色关联的所有权限并预取数据        permissions = obj.permissions.all().order_by('primary_page','page', 'component')                # 按page字段分组,只处理component为null的权限        page_access = {}        for perm in permissions:            # 只处理页面访问权限(component为null)            if perm.component is None:                page_access[perm.primary_page] = perm.enabled                # 转换为前端需要的格式        return [{"page": page, "enabled": enabled} for page, enabled in page_access.items()]class RoleSerializer(serializers.ModelSerializer):    class Meta:        model = Role        fields = '__all__'class PermissionSerializer(serializers.ModelSerializer):    class Meta:        model = Permission        fields = '__all__'
 |