diff --git a/src/signal_documentation/settings.py b/src/signal_documentation/settings.py index caa0d55..e190577 100644 --- a/src/signal_documentation/settings.py +++ b/src/signal_documentation/settings.py @@ -261,6 +261,8 @@ } } +CACHE_TIME = int(os.environ.get('CACHE_TIME', 60 * 60 * 24)) # 24 hours + # Celery # https://docs.celeryq.dev/en/stable/index.html diff --git a/src/signals/serializers.py b/src/signals/serializers.py index ff3671d..e876c6e 100644 --- a/src/signals/serializers.py +++ b/src/signals/serializers.py @@ -21,7 +21,7 @@ class SignalSerializer(ModelSerializer): links = LinkSerializer(many=True) pathogen = SlugRelatedField(many=True, read_only=True, slug_field='name') - signal_type = SlugRelatedField(many=True, read_only=True, slug_field='name') + signal_type = SlugRelatedField(read_only=True, slug_field='name') available_geography = SlugRelatedField(many=True, read_only=True, slug_field='name') category = SlugRelatedField(read_only=True, slug_field='name') source = SlugRelatedField(read_only=True, slug_field='name') diff --git a/src/signals/urls.py b/src/signals/urls.py index 51f63c2..c4b6542 100644 --- a/src/signals/urls.py +++ b/src/signals/urls.py @@ -1,14 +1,16 @@ from django.urls import path from django.urls.resolvers import URLPattern +from django.views.decorators.cache import cache_page from signals.views import ( SignalsDetailView, SignalsListApiView, SignalsListView, ) +from signal_documentation.settings import CACHE_TIME urlpatterns: list[URLPattern] = [ - path('', SignalsListView.as_view(), name='signals'), + path('', cache_page(CACHE_TIME)(SignalsListView.as_view()), name='signals'), path('signals//', SignalsDetailView.as_view(), name='signal'), path('signals//', SignalsDetailView.as_view(), name='signal'), diff --git a/src/signals/views.py b/src/signals/views.py index 2081e74..5d39d7d 100644 --- a/src/signals/views.py +++ b/src/signals/views.py @@ -93,7 +93,17 @@ def get_context_data(self, **kwargs) -> Dict[str, Any]: context["url_params_str"] = url_params_str context["filter"] = SignalFilter(self.request.GET, queryset=self.get_queryset()) - context["signals"] = self.get_queryset() + context["signals"] = self.get_queryset().prefetch_related( + "pathogen", + "available_geography", + "geographic_scope", + "source", + ).select_related( + "base", + "signal_type", + "category", + "license" + ) return context