from django.views.generic import TemplateView from parks.models import Park from .filters import ParkFilter class AdaptiveSearchView(TemplateView): template_name = "search/results.html" def get_queryset(self): """ Get the base queryset, optimized with select_related and prefetch_related """ return Park.objects.select_related('owner').prefetch_related( 'location', 'photos' ).all() def get_filterset(self): """ Get the filterset instance """ return ParkFilter(self.request.GET, queryset=self.get_queryset()) def get_context_data(self, **kwargs): """ Add filtered results and filter form to context """ context = super().get_context_data(**kwargs) filterset = self.get_filterset() context.update({ 'results': filterset.qs, 'filters': filterset, 'applied_filters': bool(self.request.GET), # Check if any filters are applied }) return context class FilterFormView(TemplateView): """ View for rendering just the filter form for HTMX updates """ template_name = "search/filters.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) filterset = ParkFilter(self.request.GET, queryset=Park.objects.all()) context['filters'] = filterset return context