63 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
| from django.shortcuts import render
 | |
| from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet, GenericViewSet
 | |
| from apps.vm.models import Visit, Visitor, Vpeople
 | |
| from apps.vm.serializers import VisitCreateUpdateSerializer, VisitSerializer, VisitorCreateSerializer, VisitorSerializer, VpeopleCreateSerializer, VpeopleSerializer
 | |
| from rest_framework.decorators import action
 | |
| from rest_framework.response import Response
 | |
| from rest_framework.exceptions import ParseError
 | |
| from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin
 | |
| from apps.utils.mixins import CustomDestoryModelMixin
 | |
| # Create your views here.
 | |
| 
 | |
| 
 | |
| class VisitViewSet(CustomModelViewSet):
 | |
|     queryset = Visit.objects.all()
 | |
|     create_serializer_class = VisitCreateUpdateSerializer
 | |
|     update_serializer_class = VisitCreateUpdateSerializer
 | |
|     serializer_class = VisitSerializer
 | |
| 
 | |
|     def get_queryset(self):
 | |
|         user = self.request.user
 | |
|         queryset = super().get_queryset()
 | |
|         if user.type == 'visitor':
 | |
|             queryset = queryset.filter(create_by=user)
 | |
|         return queryset
 | |
| 
 | |
|     def update(self, request, *args, **kwargs):
 | |
|         obj = self.get_object()
 | |
|         if obj.state != Visit.V_CREATE:
 | |
|             raise ParseError('项目非创建状态不可更改')
 | |
|         return super().update(request, *args, **kwargs)
 | |
| 
 | |
|     def destroy(self, request, *args, **kwargs):
 | |
|         obj = self.get_object()
 | |
|         if obj.state != Visit.V_CREATE:
 | |
|             raise ParseError('项目非创建状态不可删除')
 | |
|         return super().destroy(request, *args, **kwargs)
 | |
| 
 | |
| 
 | |
| class VisitorViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, CustomDestoryModelMixin,
 | |
|                      CustomGenericViewSet):
 | |
|     queryset = Visitor.objects.all()
 | |
|     create_serializer_class = VisitorCreateSerializer
 | |
|     serializer_class = VisitorSerializer
 | |
| 
 | |
| 
 | |
| class VpeopleView(ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
 | |
|     perms_map = {'get': '*', 'post': 'visit:update', 'put': 'visit:update', 'delete': 'visit:update'}
 | |
|     queryset = Vpeople.objects.all()
 | |
|     create_serializer_class = VpeopleCreateSerializer
 | |
|     serializer_class = VpeopleSerializer
 | |
| 
 | |
|     def create(self, request, *args, **kwargs):
 | |
|         obj = self.get_object()
 | |
|         if obj.visit.state != Visit.V_CREATE:
 | |
|             raise ParseError('项目非创建状态不可新增成员')
 | |
|         return super().create(request, *args, **kwargs)
 | |
| 
 | |
|     def destroy(self, request, *args, **kwargs):
 | |
|         obj = self.get_object()
 | |
|         if obj.visit.state != Visit.V_CREATE:
 | |
|             raise ParseError('项目非创建状态不可新增成员')
 | |
|         return super().destroy(request, *args, **kwargs)
 |