From fb275a091aed230313beab89c196c65ec656b797 Mon Sep 17 00:00:00 2001 From: komoliddin Date: Fri, 24 Apr 2026 11:21:01 +0500 Subject: [PATCH] Add view for crud user --- core/apps/accounts/serializers/user.py | 13 +++++++++++++ core/apps/accounts/urls.py | 3 ++- core/apps/accounts/views/user.py | 18 +++++++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/apps/accounts/serializers/user.py b/core/apps/accounts/serializers/user.py index 4f3276e..2a3d902 100644 --- a/core/apps/accounts/serializers/user.py +++ b/core/apps/accounts/serializers/user.py @@ -30,3 +30,16 @@ class UserUpdateSerializer(serializers.ModelSerializer): "last_name", "avatar" ] + +class AdminUserSerializer(serializers.ModelSerializer): + avatar = serializers.SerializerMethodField(method_name='get_avatar') + + class Meta: + model = get_user_model() + fields = "__all__" + + def get_avatar(self, obj): + request = self.context.get('request') + if obj.avatar: + return request.build_absolute_uri(obj.avatar.url) + return None \ No newline at end of file diff --git a/core/apps/accounts/urls.py b/core/apps/accounts/urls.py index f7a1e2d..45ae8fd 100644 --- a/core/apps/accounts/urls.py +++ b/core/apps/accounts/urls.py @@ -4,7 +4,7 @@ Accounts app urls from django.urls import path, include from rest_framework_simplejwt import views as jwt_views -from .views import RegisterView, ResetPasswordView, MeView, ChangePasswordView, UserListApiView, AdminUserListApiView +from .views import RegisterView, ResetPasswordView, MeView, ChangePasswordView, UserListApiView, AdminUserListApiView,AdminUserView from rest_framework.routers import DefaultRouter router = DefaultRouter() @@ -12,6 +12,7 @@ router.register("auth", RegisterView, basename="auth") router.register("auth", ResetPasswordView, basename="reset-password") router.register("auth", MeView, basename="me") router.register("auth", ChangePasswordView, basename="change-password") +router.register("user", AdminUserView, basename="user-crud") urlpatterns = [ diff --git a/core/apps/accounts/views/user.py b/core/apps/accounts/views/user.py index f9d4b9e..73a1b1b 100644 --- a/core/apps/accounts/views/user.py +++ b/core/apps/accounts/views/user.py @@ -5,8 +5,11 @@ from rest_framework.permissions import IsAuthenticated from drf_spectacular.utils import extend_schema -from core.apps.accounts.serializers.user import UserSerializer +from core.apps.accounts.serializers.user import UserSerializer, AdminUserSerializer from core.apps.accounts.choices.user import RoleChoice +from django_core.mixins import BaseViewSetMixin +from rest_framework.viewsets import ModelViewSet + User = get_user_model() @@ -29,3 +32,16 @@ class AdminUserListApiView(generics.ListAPIView): permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ['phone', 'first_name', 'last_name'] + + +@extend_schema(tags=["User"],request=AdminUserSerializer) +class AdminUserView(BaseViewSetMixin, ModelViewSet): + queryset = User.objects.filter(role=RoleChoice.USER) + serializer_class = AdminUserSerializer + permission_classes = [IsAuthenticated] + filter_backends = [filters.SearchFilter] + search_fields = ['phone', 'first_name', 'last_name'] + + def serializer_context(self): + return self.serializer_class(context={"request": self.request}) +