From e78d9838139f7ce66d019f7ce4af923d0cc4f2cf Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Mon, 11 Aug 2025 12:16:02 +0330 Subject: [PATCH] list of devices by admin filter mixin --- apps/core/mixins/admin_mixin.py | 14 ++++++++++++++ apps/pos_device/web/api/v1/serilaizers/device.py | 5 ++++- apps/pos_device/web/api/v1/viewsets/device.py | 8 ++++---- 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 apps/core/mixins/admin_mixin.py diff --git a/apps/core/mixins/admin_mixin.py b/apps/core/mixins/admin_mixin.py new file mode 100644 index 0000000..d7f39ae --- /dev/null +++ b/apps/core/mixins/admin_mixin.py @@ -0,0 +1,14 @@ +from rest_framework.viewsets import GenericViewSet +from common.helpers import get_organization_by_user + + +class AdminFilterMixin: + admin_param_name = 'admin' + + def get_query(self, queryset): + request = self.request # noqa + + if request.query_params.get(self.admin_param_name): + return queryset + + return queryset.filter(organization=get_organization_by_user(request.user)) diff --git a/apps/pos_device/web/api/v1/serilaizers/device.py b/apps/pos_device/web/api/v1/serilaizers/device.py index e28c291..21c7997 100644 --- a/apps/pos_device/web/api/v1/serilaizers/device.py +++ b/apps/pos_device/web/api/v1/serilaizers/device.py @@ -17,7 +17,10 @@ class DeviceSerializer(ModelSerializer): """ custom output of serializer """ representation = super().to_representation(instance) - representation['organization'] = {'name': instance.organization.name} + representation['organization'] = { + 'name': instance.organization.name, + 'id': instance.organization.id + } return representation diff --git a/apps/pos_device/web/api/v1/viewsets/device.py b/apps/pos_device/web/api/v1/viewsets/device.py index ca6776d..22e7773 100644 --- a/apps/pos_device/web/api/v1/viewsets/device.py +++ b/apps/pos_device/web/api/v1/viewsets/device.py @@ -9,6 +9,7 @@ from apps.authentication.api.v1.api import ( OrganizationSerializer ) from apps.core.mixins.search_mixin import DynamicSearchMixin +from apps.core.mixins.admin_mixin import AdminFilterMixin from apps.authorization.models import UserRelations from common.helpers import get_organization_by_user from rest_framework.exceptions import APIException @@ -57,7 +58,7 @@ class ProviderCompanyViewSet(viewsets.ModelViewSet): # noqa return self.get_paginated_response(serializer.data) -class DeviceViewSet(viewsets.ModelViewSet): +class DeviceViewSet(viewsets.ModelViewSet, AdminFilterMixin): queryset = pos_models.Device.objects.all() serializer_class = device_serializer.DeviceSerializer @@ -87,9 +88,8 @@ class DeviceViewSet(viewsets.ModelViewSet): def my_devices(self, request): """ list of company devices """ - devices = self.queryset.filter( - organization=get_organization_by_user(request.user) - ) + # using admin filter mixin to get query + devices = self.get_query(self.queryset) # paginate devices page = self.paginate_queryset(devices)