from django.shortcuts import render, get_object_or_404 from django.db.models import Q from .models import Service, CloudProvider, Country, ServiceLevel, Category def service_list(request): services = Service.objects.all() cloud_providers = CloudProvider.objects.all() countries = Country.objects.all() service_levels = ServiceLevel.objects.all() categories = Category.objects.filter(parent=None) # Top-level categories # Filter handling if request.GET.get("cloud_provider"): services = services.filter(cloud_provider_id=request.GET.get("cloud_provider")) if request.GET.get("country"): services = services.filter(countries__id=request.GET.get("country")) if request.GET.get("service_level"): services = services.filter(service_level_id=request.GET.get("service_level")) if request.GET.get("category"): category_id = request.GET.get("category") category = Category.objects.get(id=category_id) # Get all subcategories subcategories = Category.objects.filter(parent=category) # Filter services in this category or its subcategories services = services.filter( Q(categories=category) | Q(categories__in=subcategories) ).distinct() if request.GET.get("search"): query = request.GET.get("search") services = services.filter( Q(name__icontains=query) | Q(description__icontains=query) ) context = { "services": services, "cloud_providers": cloud_providers, "countries": countries, "service_levels": service_levels, "categories": categories, } return render(request, "services/service_list.html", context) def service_detail(request, pk): service = get_object_or_404(Service, pk=pk) return render(request, "services/service_detail.html", {"service": service})