# Site-Wide Search System Architecture ## 1. Architectural Overview - **Filter-First Approach**: Utilizes django-filter for robust filtering capabilities - **Modular Design**: ```python # filters.py class ParkFilter(django_filters.FilterSet): search = django_filters.CharFilter(method='filter_search') class Meta: model = Park fields = { 'state': ['exact', 'in'], 'rating': ['gte', 'lte'], } def filter_search(self, queryset, name, value): return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value) ) ``` ## 2. Enhanced Backend Components ### Search Endpoint (`/search/`) ```python # views.py class AdaptiveSearchView(TemplateView): template_name = "search/results.html" def get_queryset(self): return Park.objects.all() def get_filterset(self): return ParkFilter(self.request.GET, queryset=self.get_queryset()) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) filterset = self.get_filterset() context['results'] = filterset.qs context['filters'] = filterset.form return context ``` ## 3. Plugin Integration ### Recommended django-filter Extensions ```python # settings.py INSTALLED_APPS += [ 'django_filters', 'django_filters_addons', # For custom widgets 'rangefilter', # For date/number ranges ] # filters.py class EnhancedParkFilter(ParkFilter): rating_range = django_filters.RangeFilter(field_name='rating') features = django_filters.MultipleChoiceFilter( field_name='features__slug', widget=HorizontalCheckboxSelectMultiple, lookup_expr='contains' ) class Meta(ParkFilter.Meta): fields = ParkFilter.Meta.fields + ['rating_range', 'features'] ``` ## 4. Frontend Filter Rendering ```html