views.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from rest_framework import viewsets
  2. from utils.page import MyPageNumberPagination
  3. from rest_framework.filters import OrderingFilter
  4. from django_filters.rest_framework import DjangoFilterBackend
  5. from .models import Users, AcademicProfile, ResearchGroup, GroupMembership
  6. from .filter import UsersFilter, AcademicProfileFilter, ResearchGroupFilter, GroupMembershipFilter
  7. from .serializers import UsersGetSerializer
  8. class UserprofileViewSet(viewsets.ModelViewSet):
  9. """
  10. 用户档案视图集
  11. retrieve:
  12. Response a data list (get)
  13. list:
  14. Response a data list (all)
  15. create:
  16. Create a data line (post)
  17. delete:
  18. Delete a data line (delete)
  19. partial_update:
  20. Partial_update a data (patch:partial_update)
  21. update:
  22. Update a data (put:update)
  23. """
  24. fliter_backends = (DjangoFilterBackend, OrderingFilter)
  25. ordering_fields = ('create_time', 'update_time')
  26. filterset_class = UsersFilter
  27. pagination_class = MyPageNumberPagination
  28. def get_project(self):
  29. try:
  30. id = self.kwargs.get('pk')
  31. return id
  32. except:
  33. return None
  34. def get_queryset(self):
  35. project_id = self.get_project()
  36. if project_id:
  37. return Users.objects.filter(user_id=project_id)
  38. else:
  39. return Users.objects.all()
  40. def get_serializer_class(self):
  41. if self.action in ['list','retrieve']:
  42. return UsersGetSerializer
  43. else:
  44. return UsersGetSerializer
  45. def create(self, request, *args, **kwargs):
  46. serializer = self.get_serializer(data=request.data)
  47. serializer.is_valid(raise_exception=True)
  48. self.perform_create(serializer)
  49. headers = self.get_success_headers(serializer.data)
  50. return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
  51. def update(self, request, *args, **kwargs):
  52. qs = self.get_object()
  53. serializer = self.get_serializer(qs, data=request.data, partial=True)
  54. serializer.is_valid(raise_exception=True)
  55. self.perform_update(serializer)
  56. return Response(serializer.data)
  57. def partial_update(self, request, *args, **kwargs):
  58. qs = self.get_object()
  59. serializer = self.get_serializer(qs, data=request.data, partial=True)
  60. serializer.is_valid(raise_exception=True)
  61. self.perform_update(serializer)
  62. return Response(serializer.data)
  63. def destroy(self, request, *args, **kwargs):
  64. qs = self.get_object()
  65. qs.is_delete = True
  66. qs.save()
  67. return Response(status=status.HTTP_204_NO_CONTENT)
  68. def perform_create(self, serializer):
  69. serializer.save()
  70. def perform_update(self, serializer):
  71. serializer.save()