diff --git a/src/c3nav/mapdata/models/geometry/space.py b/src/c3nav/mapdata/models/geometry/space.py index 2ecc338b..416f8048 100644 --- a/src/c3nav/mapdata/models/geometry/space.py +++ b/src/c3nav/mapdata/models/geometry/space.py @@ -41,6 +41,13 @@ class SpaceGeometryMixin(GeometryMixin): except ObjectDoesNotExist: return None + @cached_property + def main_level_id(self): + try: + return self.space.level.on_top_of_id or self.space.level_id + except ObjectDoesNotExist: + return None + def get_geojson_properties(self, *args, **kwargs) -> dict: result = super().get_geojson_properties(*args, **kwargs) if hasattr(self, 'get_color'): diff --git a/src/c3nav/mapdata/quests/base.py b/src/c3nav/mapdata/quests/base.py index 0c6049e5..5a292241 100644 --- a/src/c3nav/mapdata/quests/base.py +++ b/src/c3nav/mapdata/quests/base.py @@ -23,7 +23,7 @@ class Quest: @property def level_id(self) -> int: - return self.obj.level_id + return self.obj.main_level_id @property def identifier(self) -> str: diff --git a/src/c3nav/mapdata/quests/simple.py b/src/c3nav/mapdata/quests/simple.py index b3c13f6d..e738d0d8 100644 --- a/src/c3nav/mapdata/quests/simple.py +++ b/src/c3nav/mapdata/quests/simple.py @@ -49,4 +49,5 @@ class RangingBeaconAltitudeQuest(Quest): @classmethod def _qs_for_request(cls, request): - return RangingBeacon.qs_for_request(request).select_related('space').filter(altitude_quest=True) + return RangingBeacon.qs_for_request(request).select_related('space', + 'space__level').filter(altitude_quest=True)