serializers.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. from rest_framework import serializers
  2. from .models import ListModel, TypeListModel, Role, Permission
  3. from utils import datasolve
  4. class StaffGetSerializer(serializers.ModelSerializer):
  5. staff_name = serializers.CharField(read_only=True, required=False)
  6. staff_type = serializers.CharField(read_only=True, required=False)
  7. check_code = serializers.IntegerField(read_only=True, required=False)
  8. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  9. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  10. class Meta:
  11. model = ListModel
  12. exclude = ['openid', 'is_delete', ]
  13. read_only_fields = ['id', ]
  14. class StaffPostSerializer(serializers.ModelSerializer):
  15. openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
  16. staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  17. staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  18. check_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
  19. class Meta:
  20. model = ListModel
  21. exclude = ['is_delete', ]
  22. read_only_fields = ['id', 'create_time', 'update_time', ]
  23. class StaffUpdateSerializer(serializers.ModelSerializer):
  24. staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  25. staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  26. class Meta:
  27. model = ListModel
  28. exclude = ['openid', 'is_delete', ]
  29. read_only_fields = ['id', 'create_time', 'update_time', 'appid']
  30. class StaffPartialUpdateSerializer(serializers.ModelSerializer):
  31. staff_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  32. staff_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  33. class Meta:
  34. model = ListModel
  35. exclude = ['openid', 'is_delete', ]
  36. read_only_fields = ['id', 'create_time', 'update_time', ]
  37. class FileRenderSerializer(serializers.ModelSerializer):
  38. staff_name = serializers.CharField(read_only=False, required=False)
  39. staff_type = serializers.CharField(read_only=False, required=False)
  40. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  41. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  42. class Meta:
  43. model = ListModel
  44. ref_name = 'StaffFileRenderSerializer'
  45. exclude = ['openid', 'is_delete', ]
  46. class StaffTypeGetSerializer(serializers.ModelSerializer):
  47. staff_type = serializers.CharField(read_only=True, required=False)
  48. creater = serializers.CharField(read_only=True, required=False)
  49. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  50. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  51. class Meta:
  52. model = TypeListModel
  53. exclude = ['openid']
  54. read_only_fields = ['id', ]
  55. class userStaffGetSerializer(serializers.ModelSerializer):
  56. staff_name = serializers.CharField(read_only=True, required=False)
  57. staff_type = serializers.CharField(read_only=True, required=False)
  58. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  59. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  60. class Meta:
  61. model = ListModel
  62. exclude = ['openid', 'is_delete', 'check_code', ]
  63. read_only_fields = ['id', ]
  64. class userStaffPostSerializer(serializers.ModelSerializer):
  65. openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
  66. staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  67. staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  68. check_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
  69. class Meta:
  70. model = ListModel
  71. exclude = ['is_delete', ]
  72. read_only_fields = ['id', 'create_time', 'update_time', ]
  73. class userStaffUpdateSerializer(serializers.ModelSerializer):
  74. staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  75. staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  76. class Meta:
  77. model = ListModel
  78. exclude = ['openid', 'is_delete', ]
  79. read_only_fields = ['id', 'create_time', 'update_time','appid' ]
  80. class userStaffPartialUpdateSerializer(serializers.ModelSerializer):
  81. staff_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  82. staff_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  83. class Meta:
  84. model = ListModel
  85. exclude = ['openid', 'is_delete', ]
  86. read_only_fields = ['id', 'create_time', 'update_time', ]
  87. class userFileRenderSerializer(serializers.ModelSerializer):
  88. staff_name = serializers.CharField(read_only=False, required=False)
  89. staff_type = serializers.CharField(read_only=False, required=False)
  90. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  91. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  92. class Meta:
  93. model = ListModel
  94. ref_name = 'StaffFileRenderSerializer'
  95. exclude = ['openid', 'is_delete', ]
  96. class userStaffTypeGetSerializer(serializers.ModelSerializer):
  97. staff_type = serializers.CharField(read_only=True, required=False)
  98. creater = serializers.CharField(read_only=True, required=False)
  99. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  100. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
  101. class Meta:
  102. model = TypeListModel
  103. exclude = ['openid']
  104. read_only_fields = ['id', ]
  105. class RolePOSTSerializer(serializers.ModelSerializer):
  106. name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  107. description = serializers.CharField(read_only=False, required=False, allow_blank=True)
  108. permissions = serializers.PrimaryKeyRelatedField(
  109. many=True,
  110. queryset=Permission.objects.all(),
  111. required=False
  112. )
  113. class Meta:
  114. model = Role
  115. fields = ['id', 'name', 'description', 'permissions']
  116. read_only_fields = ['id', ]
  117. class RoleGETSerializer(serializers.ModelSerializer):
  118. permissions_group = serializers.SerializerMethodField()
  119. class Meta:
  120. model = Role
  121. fields = ['id', 'name', 'description', 'permissions_group']
  122. def get_permissions_group(self, obj):
  123. # 获取角色关联的所有权限并预取数据
  124. permissions = obj.permissions.all().order_by('page', 'component')
  125. # 按page字段分组
  126. grouped = {}
  127. for perm in permissions:
  128. page = perm.page
  129. if page not in grouped:
  130. grouped[page] = []
  131. # 使用PermissionSerializer序列化每个权限对象
  132. serializer = PermissionSerializer(perm)
  133. grouped[page].append(serializer.data)
  134. # 转换为前端需要的格式
  135. return [{"page": page, "permissions": perms} for page, perms in grouped.items()]
  136. # 只返回page,不需要返回componet等详细信息
  137. class RolePageGETSerializer(serializers.ModelSerializer):
  138. permissions_group = serializers.SerializerMethodField()
  139. class Meta:
  140. model = Role
  141. fields = ['id', 'name', 'description', 'permissions_group']
  142. def get_permissions_group(self, obj):
  143. # 获取角色关联的所有权限并预取数据
  144. permissions = obj.permissions.all().order_by('primary_page','page', 'component')
  145. # 按page字段分组,只处理component为null的权限
  146. page_access = {}
  147. for perm in permissions:
  148. # 只处理页面访问权限(component为null)
  149. if perm.component is None:
  150. page_access[perm.primary_page] = perm.enabled
  151. # 转换为前端需要的格式
  152. return [{"page": page, "enabled": enabled} for page, enabled in page_access.items()]
  153. class RoleSerializer(serializers.ModelSerializer):
  154. class Meta:
  155. model = Role
  156. fields = '__all__'
  157. class PermissionSerializer(serializers.ModelSerializer):
  158. class Meta:
  159. model = Permission
  160. fields = '__all__'