mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:11:09 -05:00
2.6 KiB
2.6 KiB
Park Search Implementation
Architecture
The park search functionality uses a combination of:
- BaseAutocomplete for search suggestions
- django-htmx for async updates
- Django filters for advanced filtering
Components
-
Forms
ParkAutocomplete: Handles search suggestionsParkSearchForm: Integrates autocomplete with search form
-
Views
ParkSearchView: Class-based view handling search and filterssuggest_parks: Legacy endpoint maintained for backward compatibility
-
Templates
- Simplified search UI using autocomplete widget
- Integrated loading indicators
- Filter form for additional search criteria
Implementation Details
Search Form
class ParkSearchForm(forms.Form):
park = forms.ModelChoiceField(
queryset=Park.objects.all(),
required=False,
widget=AutocompleteWidget(
ac_class=ParkAutocomplete,
attrs={
'class': 'w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white',
'placeholder': 'Search parks...'
}
)
)
Autocomplete
class ParkAutocomplete(BaseAutocomplete):
model = Park
search_attrs = ['name']
def get_search_results(self, search):
return (get_base_park_queryset()
.filter(name__icontains=search)
.select_related('owner')
.order_by('name'))
View Integration
class ParkSearchView(TemplateView):
template_name = "parks/park_list.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['search_form'] = ParkSearchForm(self.request.GET)
# ... filter handling ...
return context
Features
-
Security
- Tiered access control:
- Public basic search
- Authenticated users get autocomplete
- Protected endpoints via settings
- CSRF protection
- Input validation
- Tiered access control:
-
Real-time Search
- Debounced input handling
- Instant results display
- Loading indicators
-
Accessibility
- ARIA labels and roles
- Keyboard navigation support
- Screen reader compatibility
-
Integration
- Works with existing filter system
- Maintains view mode selection
- Preserves URL state
Performance Considerations
- Prefetch related owner data
- Uses base queryset optimizations
- Debounced search requests
- Proper index usage on name field
Future Improvements
- Consider adding full-text search
- Implement result caching
- Add geographic search capabilities
- Enhance filter integration