from rest_framework.serializers import ModelSerializer, Serializer, IntegerField, BooleanField from .permission_serializer import PermissionsSerializer from erp_system.models import RolesModel, PermissionsModel from rest_framework import serializers class RolesSerializer(ModelSerializer): """ 普通的序列化 """ permissions = PermissionsSerializer(many=True, read_only=True) delete_flag = serializers.CharField(read_only=True) class Meta: model = RolesModel fields = '__all__' class RolesPartialSerializer(ModelSerializer): """ 给一个角色批量授权的序列化器。 """ class Meta: model = RolesModel fields = ['id', 'permissions'] def save(self, **kwargs): # 针对某一个角色批量授权,之前存在的不变,之前没有的会增加权限 if self.instance: permission_list = self.validated_data.get('permissions') current_list = self.instance.permissions.all() if permission_list: for p in permission_list: if p not in current_list: # 多对多的关联 如果数据库中已经存在对象,则使用add,否则使用 # 变量名=变量名.B类名小写_set.create(字段='值') self.instance.permissions.add(p.id) self.instance.save() return self.instance class RoleSetPermissionSerializer(Serializer): """ 角色单一授权,或者取消单一授权 """ # 角色ID role_id = IntegerField(write_only=True, required=True, help_text='选择的角色ID') permission_id = IntegerField(write_only=True, required=True, help_text='选择的权限ID') # 是否是:取消授权还是授予权限 is_create = BooleanField(write_only=True, required=True, help_text='是否授予还是删除权限')