improve location api caching again and improve subtitles/descriptions
This commit is contained in:
parent
8beb6f9e8b
commit
f83b77ed8b
4 changed files with 38 additions and 1 deletions
|
@ -284,6 +284,18 @@ class LocationViewSet(RetrieveModelMixin, GenericViewSet):
|
|||
if group is not None:
|
||||
group.locations.append(obj)
|
||||
|
||||
# add levels to spaces
|
||||
levels = {obj.pk: obj for obj in queryset if isinstance(obj, Level)}
|
||||
for obj in queryset:
|
||||
if isinstance(obj, LevelGeometryMixin):
|
||||
obj.level_cache = levels.get(obj.level_id, None)
|
||||
|
||||
# add spaces to areas and POIs
|
||||
spaces = {obj.pk: obj for obj in queryset if isinstance(obj, Space)}
|
||||
for obj in queryset:
|
||||
if isinstance(obj, SpaceGeometryMixin):
|
||||
obj.space_cache = spaces.get(obj.space_id, None)
|
||||
|
||||
# precache cached properties
|
||||
for obj in queryset:
|
||||
# noinspection PyStatementEffect
|
||||
|
|
|
@ -4,6 +4,7 @@ from operator import attrgetter, itemgetter
|
|||
import numpy as np
|
||||
from django.db import models
|
||||
from django.db.models import F
|
||||
from django.utils.text import format_lazy
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from scipy.sparse.csgraph._shortest_path import dijkstra
|
||||
from shapely.affinity import scale
|
||||
|
@ -42,6 +43,15 @@ class LevelGeometryMixin(GeometryMixin):
|
|||
result['level'] = self.level_id
|
||||
return result
|
||||
|
||||
@property
|
||||
def subtitle(self):
|
||||
base_subtitle = super().subtitle
|
||||
if self.level_cache is not None:
|
||||
return format_lazy(_('{category}, {level}'),
|
||||
category=base_subtitle,
|
||||
level=self.level_cache.title)
|
||||
return base_subtitle
|
||||
|
||||
def register_change(self, force=False):
|
||||
if force or self.geometry_changed:
|
||||
changed_geometries.register(self.level_id, self.geometry if force else self.get_changed_geometry())
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from django.db import models
|
||||
from django.utils.text import format_lazy
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
|
||||
|
||||
|
@ -29,6 +30,20 @@ class SpaceGeometryMixin(GeometryMixin):
|
|||
result['color'] = color
|
||||
return result
|
||||
|
||||
@property
|
||||
def subtitle(self):
|
||||
base_subtitle = super().subtitle
|
||||
if self.space_cache is not None:
|
||||
if self.space_cache.level_cache is not None:
|
||||
return format_lazy(_('{category}, {space}, {level}'),
|
||||
category=base_subtitle,
|
||||
space=self.space_cache.title,
|
||||
level=self.space_cache.level_cache.title)
|
||||
return format_lazy(_('{category}, {space}'),
|
||||
category=base_subtitle,
|
||||
level=self.space_cache.title)
|
||||
return base_subtitle
|
||||
|
||||
def register_change(self, force=True):
|
||||
space = self.space
|
||||
if force or self.geometry_changed:
|
||||
|
|
|
@ -166,7 +166,7 @@ class SpecificLocation(Location, models.Model):
|
|||
@property
|
||||
def subtitle(self):
|
||||
groups = tuple(self.groups.all())
|
||||
return groups[0].title if groups else str(self.__class__._meta.verbose_name)
|
||||
return groups[0].title if groups else self.__class__._meta.verbose_name
|
||||
|
||||
@cached_property
|
||||
def order(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue