django-vue-admin/backend/dvadmin/system/views/dictionary.py

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="获取成功")