""" Examples of how to use the search/filter system in different contexts. These are example implementations - DO NOT import or use this file directly. """ from django.views.generic import ListView from django_filters import CharFilter, ChoiceFilter, NumberFilter, DateFromToRangeFilter from django.db.models import Q from .mixins import HTMXFilterableMixin from .filters import LocationFilterMixin, RatingFilterMixin, DateRangeFilterMixin, create_model_filter # Example 1: Basic List View with Filtering """ class RideListView(HTMXFilterableMixin, ListView): model = Ride template_name = "rides/ride_list.html" paginate_by = 20 # Define search fields for text search search_fields = ['name', 'description', 'manufacturer__name'] # Add any model-specific filters additional_filters = { 'category': ChoiceFilter(choices=Ride.CATEGORY_CHOICES), 'manufacturer': ModelChoiceFilter(queryset=Manufacturer.objects.all()), 'status': ChoiceFilter(choices=Ride.STATUS_CHOICES), } def get_queryset(self): return super().get_queryset().select_related('park', 'manufacturer') """ # Example 2: Using create_model_filter for Dynamic Filter Creation """ # Create a filter for Company model CompanyFilter = create_model_filter( model=Company, search_fields=['name', 'description', 'headquarters'], mixins=[LocationFilterMixin, DateRangeFilterMixin], additional_filters={ 'min_parks': NumberFilter( field_name='parks__count', lookup_expr='gte', label='Minimum Parks' ), } ) class CompanyListView(HTMXFilterableMixin, ListView): model = Company filter_class = CompanyFilter template_name = "companies/company_list.html" """ # Example 3: Custom Filter Implementation """ class ManufacturerFilter(FilterSet): search = CharFilter(method='filter_search') country = ChoiceFilter(choices=COUNTRY_CHOICES) founded_date = DateFromToRangeFilter() min_rides = NumberFilter(field_name='rides__count', lookup_expr='gte') class Meta: model = Manufacturer fields = { 'status': ['exact'], 'type': ['exact', 'in'], } def filter_search(self, queryset, name, value): if not value: return queryset return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value) | Q(rides__name__icontains=value) ).distinct() """ # Example 4: Custom Template Implementation """ {# templates/search/partials/ride_results.html #}