Skip to content

Commit

Permalink
used prefetch where we are querying the skills using UserAssigned Ser…
Browse files Browse the repository at this point in the history
…ializer
  • Loading branch information
yaswanthsaivendra committed May 26, 2023
1 parent d2134a9 commit 7000a38
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
20 changes: 14 additions & 6 deletions care/facility/api/viewsets/facility_users.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Prefetch
from django_filters import rest_framework as filters
from rest_framework import mixins
from rest_framework.exceptions import ValidationError
Expand All @@ -6,12 +8,14 @@

from care.facility.models.facility import Facility
from care.users.api.serializers.user import UserAssignedSerializer
from care.users.models import User
from care.users.models import Skill, User


class UserFilter(filters.FilterSet):
user_type = filters.TypedChoiceFilter(choices=[(key, key) for key in User.TYPE_VALUE_MAP.keys()],
coerce=lambda role: User.TYPE_VALUE_MAP[role])
user_type = filters.TypedChoiceFilter(
choices=[(key, key) for key in User.TYPE_VALUE_MAP.keys()],
coerce=lambda role: User.TYPE_VALUE_MAP[role],
)

class Meta:
model = User
Expand All @@ -21,13 +25,17 @@ class Meta:
class FacilityUserViewSet(GenericViewSet, mixins.ListModelMixin):
serializer_class = UserAssignedSerializer
filterset_class = UserFilter
queryset = User.objects.all()
queryset = User.objects.all().prefetch_related(
Prefetch("skills", queryset=Skill.objects.filter(userskill__deleted=False))
)
permission_classes = [IsAuthenticated]
filter_backends = [filters.DjangoFilterBackend]

def get_queryset(self):
try:
facility = Facility.objects.get(external_id=self.kwargs.get("facility_external_id"))
facility = Facility.objects.get(
external_id=self.kwargs.get("facility_external_id")
)
return facility.users.filter(deleted=False).order_by("-last_login")
except:
except ObjectDoesNotExist:
raise ValidationError({"Facility": "Facility not found"})
6 changes: 1 addition & 5 deletions care/users/api/serializers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,11 +358,7 @@ class UserAssignedSerializer(serializers.ModelSerializer):
home_facility_object = FacilityBareMinimumSerializer(
source="home_facility", read_only=True
)
skills = serializers.SerializerMethodField()

def get_skills(self, obj):
qs = obj.skills.filter(userskill__deleted=False)
return SkillSerializer(qs, many=True).data
skills = SkillSerializer(many=True, read_only=True)

class Meta:
model = User
Expand Down

0 comments on commit 7000a38

Please sign in to comment.