factory/apps/vm/views.py

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)