From e3e12ea9d61e5cbb48a07c770ff3a22640e8c67f Mon Sep 17 00:00:00 2001 From: "Rudy (zarya)" Date: Mon, 23 Jun 2025 20:56:18 +0200 Subject: [PATCH] Dont show empty layers/facilities --- src/maps/views.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/maps/views.py b/src/maps/views.py index 01e6334ef..73c18bc5f 100644 --- a/src/maps/views.py +++ b/src/maps/views.py @@ -12,12 +12,10 @@ from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.gis.geos import Point -from django.utils.decorators import method_decorator -from django.views.decorators.cache import cache_page -from django.views.decorators.cache import cache_control from django.core.exceptions import BadRequest from django.core.exceptions import PermissionDenied from django.core.serializers import serialize +from django.db.models import Count from django.db.models import Q from django.http import HttpRequest from django.http import HttpResponse @@ -27,6 +25,8 @@ from django.templatetags.static import static from django.urls import reverse from django.utils.decorators import method_decorator +from django.views.decorators.cache import cache_control +from django.views.decorators.cache import cache_page from django.views.decorators.csrf import csrf_exempt from django.views.generic import CreateView from django.views.generic import DeleteView @@ -136,21 +136,34 @@ def get_layers(self) -> QuerySet: user_teams = self.request.user.teammember_set.filter( team__camp=self.camp, ).values_list("team__name", flat=True) - return Layer.objects.filter( - ((Q(responsible_team__camp=self.camp) | Q(responsible_team=None)) & Q(public=True)) - | (Q(responsible_team__name__in=user_teams) & Q(public=False)), + return ( + Layer.objects.filter( + ((Q(responsible_team__camp=self.camp) | Q(responsible_team=None)) & Q(public=True)) + | (Q(responsible_team__name__in=user_teams) & Q(public=False)), + ) + .annotate(num_features=Count("features")) + .filter(num_features__gt=0) ) def get_context_data(self, **kwargs) -> dict: """Get the context data.""" context = super().get_context_data(**kwargs) - context["facilitytype_list"] = FacilityType.objects.filter( - responsible_team__camp=self.camp, + context["facilitytype_list"] = ( + FacilityType.objects.filter( + responsible_team__camp=self.camp, + ) + .annotate(num_facilities=Count("facilities")) + .filter(num_facilities__gt=0) ) context["layers"] = self.get_layers() - context["user_location_types"] = UserLocationType.objects.filter( - user_locations__isnull=False, - ).distinct() + context["user_location_types"] = ( + UserLocationType.objects.filter( + user_locations__isnull=False, + ) + .annotate(num_features=Count("user_locations")) + .filter(num_features__gt=0) + .distinct() + ) context["externalLayers"] = ExternalLayer.objects.filter( Q(responsible_team__camp=self.camp) | Q(responsible_team=None), )