dictionary.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # -*- coding: utf-8 -*-
  2. """
  3. @author: Allen
  4. @Created on: 2023/10/18
  5. @Remark: 字典管理
  6. """
  7. from rest_framework import serializers
  8. from rest_framework.views import APIView
  9. from application import dispatch
  10. from dvadmin.system.models import Dictionary
  11. from dvadmin.utils.json_response import SuccessResponse
  12. from dvadmin.utils.serializers import CustomModelSerializer
  13. from dvadmin.utils.viewset import CustomModelViewSet
  14. class DictionarySerializer(CustomModelSerializer):
  15. """
  16. 字典-序列化器
  17. """
  18. class Meta:
  19. model = Dictionary
  20. fields = "__all__"
  21. read_only_fields = ["id"]
  22. class DictionaryInitSerializer(CustomModelSerializer):
  23. """
  24. 初始化获取数信息(用于生成初始化json文件)
  25. """
  26. children = serializers.SerializerMethodField()
  27. def get_children(self, obj: Dictionary):
  28. data = []
  29. instance = Dictionary.objects.filter(parent_id=obj.id)
  30. if instance:
  31. serializer = DictionaryInitSerializer(instance=instance, many=True)
  32. data = serializer.data
  33. return data
  34. def save(self, **kwargs):
  35. instance = super().save(**kwargs)
  36. children = self.initial_data.get('children')
  37. # 菜单表
  38. if children:
  39. for data in children:
  40. data['parent'] = instance.id
  41. filter_data = {
  42. "value": data['value'],
  43. "parent": data['parent']
  44. }
  45. instance_obj = Dictionary.objects.filter(**filter_data).first()
  46. if instance_obj and not self.initial_data.get('reset'):
  47. continue
  48. serializer = DictionaryInitSerializer(instance_obj, data=data, request=self.request)
  49. serializer.is_valid(raise_exception=True)
  50. serializer.save()
  51. return instance
  52. class Meta:
  53. model = Dictionary
  54. fields = ['label', 'value', 'parent', 'type', 'color', 'is_value', 'status', 'sort', 'remark', 'creator',
  55. 'dept_belong_id', 'children']
  56. read_only_fields = ["id"]
  57. extra_kwargs = {
  58. 'creator': {'write_only': True},
  59. 'dept_belong_id': {'write_only': True}
  60. }
  61. class DictionaryCreateUpdateSerializer(CustomModelSerializer):
  62. """
  63. 字典管理 创建/更新时的列化器
  64. """
  65. class Meta:
  66. model = Dictionary
  67. fields = '__all__'
  68. class DictionaryViewSet(CustomModelViewSet):
  69. """
  70. 字典管理接口
  71. list:查询
  72. create:新增
  73. update:修改
  74. retrieve:单例
  75. destroy:删除
  76. """
  77. queryset = Dictionary.objects.all()
  78. serializer_class = DictionarySerializer
  79. extra_filter_backends = []
  80. search_fields = ['label']
  81. class InitDictionaryViewSet(APIView):
  82. """
  83. 获取初始化配置
  84. """
  85. authentication_classes = []
  86. permission_classes = []
  87. queryset = Dictionary.objects.all()
  88. def get(self, request):
  89. dictionary_key = self.request.query_params.get('dictionary_key')
  90. if dictionary_key:
  91. if dictionary_key == 'all':
  92. data = [ele for ele in dispatch.get_dictionary_config().values()]
  93. if not data:
  94. dispatch.refresh_dictionary()
  95. data = [ele for ele in dispatch.get_dictionary_config().values()]
  96. else:
  97. data = self.queryset.filter(parent__value=dictionary_key, status=True).values('label', 'value', 'type',
  98. 'color')
  99. return SuccessResponse(data=data, msg="获取成功")
  100. return SuccessResponse(data=[], msg="获取成功")