Skip to content

Commit d1a812a

Browse files
committed
fix(restricted_area): Fix cache with specifi restricted area endpoint by type
fix #5136
1 parent 13dd405 commit d1a812a

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

geotrek/zoning/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ class RestrictedArea(TimeStampedModelMixin, models.Model):
3535
help_text=_("Visible on Geotrek-rando"),
3636
)
3737

38+
@classmethod
39+
def latest_updated(cls, type_id=None):
40+
try:
41+
qs = cls.objects.all()
42+
if type_id:
43+
qs = cls.objects.filter(area_type_id=type_id)
44+
return qs.only("date_update").latest("date_update").date_update
45+
except cls.DoesNotExist:
46+
return None
47+
3848
class Meta:
3949
ordering = ["area_type", "name"]
4050
verbose_name = _("Restricted area")

geotrek/zoning/views.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.conf import settings
22
from django.contrib.gis.db.models.functions import Transform
33
from django.shortcuts import get_object_or_404
4+
from django.utils.translation import get_language
45
from mapentity.decorators import view_cache_latest, view_cache_response_content
56
from mapentity.renderers import GeoJSONRenderer
67
from rest_framework import permissions, viewsets
@@ -32,6 +33,20 @@ class RestrictedAreaViewSet(LandGeoJSONAPIViewMixin, viewsets.ReadOnlyModelViewS
3233
model = RestrictedArea
3334
serializer_class = RestrictedAreaSerializer
3435

36+
def view_cache_key(self):
37+
"""Used by the ``view_cache_response_content`` decorator."""
38+
language = get_language()
39+
geojson_lookup = None
40+
latest_saved = self.model.latest_updated(type_id=self.kwargs.get("type_pk"))
41+
if latest_saved:
42+
geojson_lookup = "{}_restricted_area_{}_{}_{}_geojson_layer".format(
43+
language,
44+
self.kwargs.get("type_pk", "all"),
45+
latest_saved.isoformat(),
46+
self.request.user.pk if settings.SURICATE_WORKFLOW_ENABLED else "",
47+
)
48+
return geojson_lookup
49+
3550
def get_queryset(self):
3651
type_pk = self.kwargs.get("type_pk")
3752
qs = super().get_queryset()

0 commit comments

Comments
 (0)