Skip to content

Commit bd560c3

Browse files
wmuldergovray-oxd
authored andcommitted
DBC22-5405: N+1 issues in ferry API
1 parent 4f7ca62 commit bd560c3

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

src/backend/apps/ferry/serializers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ class Meta:
7979
)
8080

8181
def get_vessels(self, obj):
82-
vessels = Ferry.objects.filter(route_id=obj.route_id).order_by("priority")
82+
if hasattr(obj, 'vessels_list'):
83+
vessels = obj.vessels_list
84+
else:
85+
vessels = Ferry.objects.filter(route_id=obj.route_id).order_by("priority")
8386
return FerryVesselSerializer(vessels, many=True).data
8487

8588
def get_id(self, obj):

src/backend/apps/ferry/views.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,23 @@
66

77

88
class FerryAPI(CachedListModelMixin):
9-
queryset = Ferry.objects.distinct('route_id')
9+
queryset = Ferry.objects.all()
1010
serializer_class = FerryRouteSerializer
1111
cache_key = CacheKey.FERRY_LIST
1212
cache_timeout = CacheTimeout.FERRY_LIST
1313

14+
def fetch_list_data(self, queryset=None):
15+
qs = Ferry.objects.all().order_by('route_id', 'priority')
16+
routes = {}
17+
for ferry in qs:
18+
if ferry.route_id not in routes:
19+
ferry.vessels_list = []
20+
routes[ferry.route_id] = ferry
21+
22+
routes[ferry.route_id].vessels_list.append(ferry)
23+
24+
return self.get_serializer(list(routes.values()), many=True).data
25+
1426
class FerryViewSet(FerryAPI, viewsets.ReadOnlyModelViewSet):
1527
pass
1628

0 commit comments

Comments
 (0)