from rest_framework import viewsets from utils.page import MyPageNumberPagination from rest_framework.filters import OrderingFilter from django_filters.rest_framework import DjangoFilterBackend from .models import Users, AcademicProfile, ResearchGroup, GroupMembership from .filter import UsersFilter, AcademicProfileFilter, ResearchGroupFilter, GroupMembershipFilter from .serializers import UsersGetSerializer class UserprofileViewSet(viewsets.ModelViewSet): """ 用户档案视图集 retrieve: Response a data list (get) list: Response a data list (all) create: Create a data line (post) delete: Delete a data line (delete) partial_update: Partial_update a data (patch:partial_update) update: Update a data (put:update) """ fliter_backends = (DjangoFilterBackend, OrderingFilter) ordering_fields = ('create_time', 'update_time') filterset_class = UsersFilter pagination_class = MyPageNumberPagination def get_project(self): try: id = self.kwargs.get('pk') return id except: return None def get_queryset(self): project_id = self.get_project() if project_id: return Users.objects.filter(user_id=project_id) else: return Users.objects.all() def get_serializer_class(self): if self.action in ['list','retrieve']: return UsersGetSerializer else: return UsersGetSerializer def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) def update(self, request, *args, **kwargs): qs = self.get_object() serializer = self.get_serializer(qs, data=request.data, partial=True) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(serializer.data) def partial_update(self, request, *args, **kwargs): qs = self.get_object() serializer = self.get_serializer(qs, data=request.data, partial=True) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(serializer.data) def destroy(self, request, *args, **kwargs): qs = self.get_object() qs.is_delete = True qs.save() return Response(status=status.HTTP_204_NO_CONTENT) def perform_create(self, serializer): serializer.save() def perform_update(self, serializer): serializer.save()