146 lines
4.1 KiB
Python
146 lines
4.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
@author: 猿小天
|
|
@contact: QQ:1638245306
|
|
@Created on: 2021/6/3 003 0:30
|
|
@Remark: 字典管理
|
|
"""
|
|
from rest_framework import serializers
|
|
from rest_framework.views import APIView
|
|
|
|
from application import dispatch
|
|
from dvadmin.system.models import Dictionary
|
|
from dvadmin.utils.json_response import SuccessResponse
|
|
from dvadmin.utils.serializers import CustomModelSerializer
|
|
from dvadmin.utils.viewset import CustomModelViewSet
|
|
|
|
|
|
class DictionarySerializer(CustomModelSerializer):
|
|
"""
|
|
字典-序列化器
|
|
"""
|
|
|
|
class Meta:
|
|
model = Dictionary
|
|
fields = "__all__"
|
|
read_only_fields = ["id"]
|
|
|
|
|
|
class DictionaryInitSerializer(CustomModelSerializer):
|
|
"""
|
|
初始化获取数信息(用于生成初始化json文件)
|
|
"""
|
|
|
|
children = serializers.SerializerMethodField()
|
|
|
|
def get_children(self, obj: Dictionary):
|
|
data = []
|
|
instance = Dictionary.objects.filter(parent_id=obj.id)
|
|
if instance:
|
|
serializer = DictionaryInitSerializer(instance=instance, many=True)
|
|
data = serializer.data
|
|
return data
|
|
|
|
def save(self, **kwargs):
|
|
instance = super().save(**kwargs)
|
|
children = self.initial_data.get("children")
|
|
# 菜单表
|
|
if children:
|
|
for data in children:
|
|
data["parent"] = instance.id
|
|
filter_data = {"value": data["value"], "parent": data["parent"]}
|
|
instance_obj = Dictionary.objects.filter(**filter_data).first()
|
|
serializer = DictionaryInitSerializer(
|
|
instance_obj, data=data, request=self.request
|
|
)
|
|
serializer.is_valid(raise_exception=True)
|
|
serializer.save()
|
|
return instance
|
|
|
|
class Meta:
|
|
model = Dictionary
|
|
fields = [
|
|
"label",
|
|
"value",
|
|
"parent",
|
|
"type",
|
|
"color",
|
|
"is_value",
|
|
"status",
|
|
"sort",
|
|
"remark",
|
|
"creator",
|
|
"dept_belong_id",
|
|
"children",
|
|
]
|
|
read_only_fields = ["id"]
|
|
extra_kwargs = {
|
|
"creator": {"write_only": True},
|
|
"dept_belong_id": {"write_only": True},
|
|
}
|
|
|
|
|
|
class DictionaryCreateUpdateSerializer(CustomModelSerializer):
|
|
"""
|
|
字典管理 创建/更新时的列化器
|
|
"""
|
|
|
|
class Meta:
|
|
model = Dictionary
|
|
fields = "__all__"
|
|
|
|
|
|
class DictionaryViewSet(CustomModelViewSet):
|
|
"""
|
|
字典管理接口
|
|
list:查询
|
|
create:新增
|
|
update:修改
|
|
retrieve:单例
|
|
destroy:删除
|
|
"""
|
|
|
|
queryset = Dictionary.objects.all()
|
|
serializer_class = DictionarySerializer
|
|
extra_filter_backends = []
|
|
search_fields = ["label"]
|
|
|
|
def get_queryset(self):
|
|
parent_id = self.request.query_params.get("parent", None)
|
|
if parent_id:
|
|
return self.queryset.get(id=parent_id).get_children()
|
|
return super().get_queryset()
|
|
|
|
|
|
class InitDictionaryViewSet(APIView):
|
|
"""
|
|
获取初始化配置
|
|
"""
|
|
|
|
authentication_classes = []
|
|
permission_classes = []
|
|
queryset = Dictionary.objects.all()
|
|
|
|
def get(self, request):
|
|
dictionary_key = self.request.query_params.get("dictionary_key")
|
|
if dictionary_key:
|
|
if dictionary_key == "all":
|
|
data = [ele for ele in dispatch.get_dictionary_config().values()]
|
|
if not data:
|
|
dispatch.refresh_dictionary()
|
|
data = [ele for ele in dispatch.get_dictionary_config().values()]
|
|
else:
|
|
# data = self.queryset.filter(
|
|
# parent__value=dictionary_key, status=True
|
|
# ).values("label", "value", "type", "color")
|
|
data = (
|
|
Dictionary.objects.get(value=dictionary_key)
|
|
.get_children()
|
|
.filter(status=True)
|
|
.values("label", "value", "type", "color")
|
|
)
|
|
print(data)
|
|
return SuccessResponse(data=data, msg="获取成功")
|
|
return SuccessResponse(data=[], msg="获取成功")
|