59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from rest_framework import generics, status
|
|
from rest_framework.decorators import api_view, permission_classes
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
from .models import Factory
|
|
from .serializers import FactorySerializer, FactoryListSerializer
|
|
|
|
|
|
class FactoryListView(generics.ListCreateAPIView):
|
|
"""
|
|
工厂列表和创建视图
|
|
"""
|
|
queryset = Factory.objects.all()
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_serializer_class(self):
|
|
if self.request.method == 'GET':
|
|
return FactoryListSerializer
|
|
return FactorySerializer
|
|
|
|
def perform_create(self, serializer):
|
|
# 只有管理员可以创建工厂
|
|
if self.request.user.role != 'admin':
|
|
raise PermissionError("只有管理员可以创建工厂")
|
|
serializer.save()
|
|
|
|
|
|
class FactoryDetailView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""
|
|
工厂详情视图
|
|
"""
|
|
queryset = Factory.objects.all()
|
|
serializer_class = FactorySerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def perform_update(self, serializer):
|
|
# 普通用户只能修改自己所属工厂的信息
|
|
if (self.request.user.role != 'admin' and
|
|
self.request.user.factory_id != self.get_object().id):
|
|
raise PermissionError("无权修改其他工厂信息")
|
|
serializer.save()
|
|
|
|
def perform_destroy(self, instance):
|
|
# 只有管理员可以删除工厂
|
|
if self.request.user.role != 'admin':
|
|
raise PermissionError("只有管理员可以删除工厂")
|
|
instance.delete()
|
|
|
|
|
|
@api_view(['GET'])
|
|
@permission_classes([IsAuthenticated])
|
|
def factory_list_simple(request):
|
|
"""
|
|
简化的工厂列表,用于下拉选择
|
|
"""
|
|
factories = Factory.objects.all()
|
|
serializer = FactoryListSerializer(factories, many=True)
|
|
return Response(serializer.data)
|