|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
| 3 | +from sqlalchemy.orm import selectinload |
| 4 | + |
3 | 5 | from onegov.activity import ActivityFilter |
4 | 6 | from onegov.feriennet import FeriennetApp, _ |
5 | 7 |
|
6 | | - |
7 | 8 | from typing import TYPE_CHECKING |
8 | 9 |
|
9 | 10 | from onegov.feriennet.collections import MatchCollection |
@@ -68,21 +69,29 @@ def get_variables(self, layout: DefaultLayout) -> RenderData: |
68 | 69 |
|
69 | 70 | activity_ids = (o.activity_id for o in occasions) |
70 | 71 | unique_activity_ids = list(dict.fromkeys(activity_ids))[:6] |
71 | | - activities = VacationActivityCollection(layout.app.session() |
72 | | - ).query( |
73 | | - ).filter(VacationActivity.id.in_(unique_activity_ids)).all() |
| 72 | + activities = ( |
| 73 | + VacationActivityCollection(layout.app.session()) |
| 74 | + .query() |
| 75 | + .options(selectinload(VacationActivity.occasions)) |
| 76 | + .filter(VacationActivity.id.in_(unique_activity_ids)) |
| 77 | + .all() |
| 78 | + ) |
74 | 79 |
|
75 | 80 | if len(activities) < 6: |
76 | 81 | filter_obj = ActivityFilter() |
77 | 82 | filter_obj.period_ids = ( |
78 | 83 | {layout.app.active_period.id |
79 | 84 | } if layout.app.active_period else set()) |
80 | | - rest_activities = VacationActivityCollection( |
81 | | - layout.app.session(), |
82 | | - filter=filter_obj, |
83 | | - ).query().filter( |
84 | | - VacationActivity.id.notin_(unique_activity_ids)).limit( |
85 | | - 6 - len(activities)) |
| 85 | + rest_activities = ( |
| 86 | + VacationActivityCollection( |
| 87 | + layout.app.session(), |
| 88 | + filter=filter_obj, |
| 89 | + ) |
| 90 | + .query() |
| 91 | + .options(selectinload(VacationActivity.occasions)) |
| 92 | + .filter(VacationActivity.id.notin_(unique_activity_ids)) |
| 93 | + .limit(6 - len(activities)) |
| 94 | + ) |
86 | 95 | activities = activities + rest_activities.all() |
87 | 96 | else: |
88 | 97 | activities = [] |
|
0 commit comments