from rest_framework import filters, generics, permissions from django.contrib.auth import get_user_model from user_profile.permissions import TargetIsStaff from user_profile import serializers from django_filters.rest_framework import DjangoFilterBackend User = get_user_model() class UserList(generics.ListCreateAPIView): queryset = User.objects.all() serializer_class = serializers.UserCreateSerializer permission_classes = [TargetIsStaff] filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend] search_fields = ['username', 'email', 'first_name', 'last_name'] filterset_fields = ['username', 'email', 'first_name', 'last_name'] ordering_fields = '__all__' def get_serializer_class(self): serializer_class = self.serializer_class if self.request.method == 'GET': serializer_class = serializers.UserRetrieveSerializer return serializer_class class UserDetail(generics.RetrieveUpdateDestroyAPIView): queryset = User.objects.all() serializer_class = serializers.UserUpdateSerializer permission_classes = [TargetIsStaff] def get_serializer_class(self): serializer_class = self.serializer_class if self.request.method == 'GET': serializer_class = serializers.UserRetrieveSerializer return serializer_class class UserPasswordUpdate(generics.UpdateAPIView): queryset = User.objects.all() serializer_class = serializers.UserUpdatePasswordSerializer permission_classes = [TargetIsStaff]