From 4cc23bc6416f3892787d7c258690d04afa6549ae Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Wed, 12 Apr 2017 15:38:00 -0400 Subject: [PATCH] Attempt to reduce the number of database calls for user_api serialization --- openedx/core/djangoapps/user_api/serializers.py | 7 +------ openedx/core/djangoapps/user_api/views.py | 6 +++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/openedx/core/djangoapps/user_api/serializers.py b/openedx/core/djangoapps/user_api/serializers.py index f46197cb95..2ba351f4f2 100644 --- a/openedx/core/djangoapps/user_api/serializers.py +++ b/openedx/core/djangoapps/user_api/serializers.py @@ -22,12 +22,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): """ Return the name attribute from the user profile object if profile exists else none """ - try: - profile = UserProfile.objects.get(user=user) - except UserProfile.DoesNotExist: - return None - - return profile.name + return user.profile.name def get_preferences(self, user): """ diff --git a/openedx/core/djangoapps/user_api/views.py b/openedx/core/djangoapps/user_api/views.py index e6125d8e6b..5da932dad6 100644 --- a/openedx/core/djangoapps/user_api/views.py +++ b/openedx/core/djangoapps/user_api/views.py @@ -956,7 +956,7 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet): """ authentication_classes = (authentication.SessionAuthentication,) permission_classes = (ApiKeyHeaderPermission,) - queryset = User.objects.all().prefetch_related("preferences") + queryset = User.objects.all().prefetch_related("preferences").select_related("profile") serializer_class = UserSerializer paginate_by = 10 paginate_by_param = "page_size" @@ -982,7 +982,7 @@ class ForumRoleUsersListView(generics.ListAPIView): raise ParseError('course_id must be specified') course_id = SlashSeparatedCourseKey.from_deprecated_string(course_id_string) role = Role.objects.get_or_create(course_id=course_id, name=name)[0] - users = role.users.all() + users = role.users.prefetch_related("preferences").select_related("profile").all() return users @@ -1011,7 +1011,7 @@ class PreferenceUsersListView(generics.ListAPIView): paginate_by_param = "page_size" def get_queryset(self): - return User.objects.filter(preferences__key=self.kwargs["pref_key"]).prefetch_related("preferences") + return User.objects.filter(preferences__key=self.kwargs["pref_key"]).prefetch_related("preferences").select_related("profile") class UpdateEmailOptInPreference(APIView):