Add search app configuration, views, and templates for advanced filtering functionality

This commit is contained in:
pacnpal
2025-02-12 12:58:04 -05:00
parent 62723d0e33
commit af57592496
14 changed files with 1047 additions and 3 deletions

View File

@@ -1,3 +1,48 @@
from django.shortcuts import render
from django.views.generic import TemplateView
from parks.models import Park
from .filters import ParkFilter
# Create your views here.
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