mat/backend/apps/dictionary/views.py

82 lines
2.4 KiB
Python

from rest_framework import generics
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.exceptions import PermissionDenied
from .models import Dictionary
from .serializers import DictionarySerializer
class DictionaryListView(generics.ListCreateAPIView):
"""
数据字典列表和创建视图
"""
serializer_class = DictionarySerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
"""
支持按类型过滤
"""
queryset = Dictionary.objects.all()
# 支持按类型过滤
dict_type = self.request.query_params.get('type')
if dict_type:
queryset = queryset.filter(type=dict_type)
# 支持按名称搜索
name = self.request.query_params.get('name')
if name:
queryset = queryset.filter(name__icontains=name)
return queryset
def perform_create(self, serializer):
# 只有管理员可以创建字典
if self.request.user.role != 'admin':
raise PermissionDenied("只有管理员可以创建字典")
serializer.save()
class DictionaryDetailView(generics.RetrieveUpdateDestroyAPIView):
"""
数据字典详情视图
"""
queryset = Dictionary.objects.all()
serializer_class = DictionarySerializer
permission_classes = [IsAuthenticated]
def perform_update(self, serializer):
# 只有管理员可以更新字典
if self.request.user.role != 'admin':
raise PermissionDenied("只有管理员可以更新字典")
serializer.save()
def perform_destroy(self, instance):
# 只有管理员可以删除字典
if self.request.user.role != 'admin':
raise PermissionDenied("只有管理员可以删除字典")
instance.delete()
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def dictionary_grouped(request):
"""
获取分组的数据字典
"""
dict_types = Dictionary.objects.values('type').distinct()
result = []
for dict_type in dict_types:
type_name = dict_type['type']
items = Dictionary.objects.filter(type=type_name)
serializer = DictionarySerializer(items, many=True)
result.append({
'type': type_name,
'items': serializer.data
})
return Response(result)