mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 13:31:08 -05:00
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
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
|