diff --git a/djblets/webapi/resources.py b/djblets/webapi/resources.py
index 13cfd31e2b8cdcdb257995f3de8284e14280bc30..699c513b3075fbec1ae06417f1aaff9bb4ad19e6 100644
--- a/djblets/webapi/resources.py
+++ b/djblets/webapi/resources.py
@@ -9,7 +9,8 @@ from django.core.urlresolvers import reverse
 from django.db import models
 from django.db.models.fields.related import (
     ManyRelatedObjectsDescriptor,
-    ReverseManyRelatedObjectsDescriptor)
+    ReverseManyRelatedObjectsDescriptor,
+    ReverseSingleRelatedObjectDescriptor)
 from django.db.models.query import QuerySet
 from django.http import (HttpResponseNotAllowed, HttpResponse,
                          HttpResponseNotModified)
@@ -1303,7 +1304,24 @@ class WebAPIResource(object):
         lookups in this request.
         """
         queryset = self.get_queryset(request, is_list=is_list, *args, **kwargs)
-        queryset = queryset.select_related()
+
+        if not hasattr(self, '_select_related_fields'):
+            self._select_related_fields = []
+
+            for field in six.iterkeys(self.fields):
+                if hasattr(self, 'serialize_%s_field' % field):
+                    continue
+
+                field_type = getattr(self.model, field, None)
+
+                if (field_type and
+                    isinstance(field_type,
+                               ReverseSingleRelatedObjectDescriptor)):
+                    self._select_related_fields.append(field)
+
+        if self._select_related_fields:
+            queryset = \
+                queryset.select_related(*self._select_related_fields)
 
         if is_list:
             if not hasattr(self, '_prefetch_related_fields'):
