Skip to content

Commit cf0c544

Browse files
committed
[SHARE- ][Fix] Prefetch related API rows
1 parent 0185222 commit cf0c544

2 files changed

Lines changed: 7 additions & 7 deletions

File tree

api/serializers.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ def __init__(self, *args, **kwargs):
2828
if 'version' in field_name or field_name in excluded_fields:
2929
self.fields.pop(field_name)
3030

31-
if not version_serializer:
32-
# add links to related objects
33-
self.fields.update({
34-
'links': fields.LinksField(links=self.Meta.links, source='*')
35-
})
36-
3731
# version specific fields
3832
if version_serializer:
3933
self.fields.update({

api/urls.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,13 @@ def generate_serializer(self, subclass):
4848

4949
def generate_viewset(self, subclass, serializer):
5050
class_name = subclass.__name__ + 'ViewSet'
51-
queryset = serializer.Meta.model.objects.all().select_related('extra')
51+
# Pre-join all fields foreign keys
52+
# Note: we can probably avoid this all together if we fix DRF
53+
# We don't need to load the entire objects, just the PKs
54+
queryset = serializer.Meta.model.objects.all().select_related(*(
55+
field.name for field in serializer.Meta.model._meta.get_fields()
56+
if field.is_relation and field.editable and not field.many_to_many
57+
))
5258
if subclass.__name__ == 'AgentIdentifier':
5359
queryset = queryset.exclude(scheme='mailto')
5460

0 commit comments

Comments
 (0)