Skip to content

Commit 00cda86

Browse files
fixed list of recent runs in the detail session view
1 parent 78a1138 commit 00cda86

File tree

2 files changed

+13
-14
lines changed

2 files changed

+13
-14
lines changed

Backend/apps/simulations/serializers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Meta:
3535
]
3636

3737
class SimulationSessionsDetailSerializer(serializers.ModelSerializer):
38-
runs = SimulationRunSerializer(many=True, read_only=True)
38+
runs = serializers.SerializerMethodField()
3939

4040
state_count = serializers.IntegerField(read_only=True)
4141
transition_count = serializers.IntegerField(read_only=True)
@@ -64,6 +64,10 @@ class Meta:
6464
'transition_count',
6565
'runs'
6666
]
67+
68+
def get_runs(self, obj):
69+
recent_runs = obj.runs.order_by('-created_at')[:5]
70+
return SimulationRunSerializer(recent_runs, many=True).data
6771

6872
def get_share_url(self, obj):
6973
"""

Backend/apps/simulations/views.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,30 +98,25 @@ def get_queryset(self):
9898
).select_related('user').prefetch_related(
9999
Prefetch(
100100
'runs',
101-
queryset=SimulationRun.objects.order_by('-created_at')[:5]
101+
queryset=SimulationRun.objects.order_by('-created_at')
102102
)
103103
)
104104

105105
# List view: Only user's own sessions
106106
queryset = SimulationSessions.objects.filter(
107107
user=self.request.user
108108
)
109-
queryset = queryset.select_related('user')
110-
queryset = queryset.prefetch_related(
111-
Prefetch(
112-
'runs',
113-
queryset=SimulationRun.objects.order_by('-created_at')[:5]
114-
)
115-
)
116-
queryset = queryset.annotate(
117-
run_count=Count('runs')
118-
)
119-
120-
# Conditional filtering based on query params
109+
110+
# Conditional filtering based on query params (must be before select_related)
121111
automata_type = self.request.query_params.get('type')
122112
if automata_type:
123113
queryset = queryset.filter(automata_type=automata_type.upper())
124114

115+
# Optimize queries
116+
queryset = queryset.select_related('user')
117+
queryset = queryset.annotate(run_count=Count('runs'))
118+
queryset = queryset.prefetch_related('runs')
119+
125120
logger.debug(f"Queryset for user {self.request.user.email}: {queryset.query}")
126121

127122
return queryset

0 commit comments

Comments
 (0)