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:
|
if group is not None:
|
||||||
group.locations.append(obj)
|
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
|
# precache cached properties
|
||||||
for obj in queryset:
|
for obj in queryset:
|
||||||
# noinspection PyStatementEffect
|
# noinspection PyStatementEffect
|
||||||
|
|
|
@ -4,6 +4,7 @@ from operator import attrgetter, itemgetter
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
|
from django.utils.text import format_lazy
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from scipy.sparse.csgraph._shortest_path import dijkstra
|
from scipy.sparse.csgraph._shortest_path import dijkstra
|
||||||
from shapely.affinity import scale
|
from shapely.affinity import scale
|
||||||
|
@ -42,6 +43,15 @@ class LevelGeometryMixin(GeometryMixin):
|
||||||
result['level'] = self.level_id
|
result['level'] = self.level_id
|
||||||
return result
|
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):
|
def register_change(self, force=False):
|
||||||
if force or self.geometry_changed:
|
if force or self.geometry_changed:
|
||||||
changed_geometries.register(self.level_id, self.geometry if force else self.get_changed_geometry())
|
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.db import models
|
||||||
|
from django.utils.text import format_lazy
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
|
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
|
||||||
|
|
||||||
|
@ -29,6 +30,20 @@ class SpaceGeometryMixin(GeometryMixin):
|
||||||
result['color'] = color
|
result['color'] = color
|
||||||
return result
|
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):
|
def register_change(self, force=True):
|
||||||
space = self.space
|
space = self.space
|
||||||
if force or self.geometry_changed:
|
if force or self.geometry_changed:
|
||||||
|
|
|
@ -166,7 +166,7 @@ class SpecificLocation(Location, models.Model):
|
||||||
@property
|
@property
|
||||||
def subtitle(self):
|
def subtitle(self):
|
||||||
groups = tuple(self.groups.all())
|
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
|
@cached_property
|
||||||
def order(self):
|
def order(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue