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)