django-filter was already installed and set as DEFAULT_FILTER_BACKENDS but unused everywhere. Replace hand-rolled get_queryset filtering with FilterSet classes (stores/catalog/locations/reviews) and filterset_fields (orders status). drf-spectacular auto-documents these for swagger, so the manual OpenApiParameter declarations for the migrated fields are removed (stores keeps lat/lng manual since geo-distance isn't a plain filter). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
24 lines
806 B
Python
24 lines
806 B
Python
from django.db.models import Q
|
|
from django_filters import rest_framework as filters
|
|
|
|
from .models import City, Neighborhood
|
|
|
|
|
|
class CityFilter(filters.FilterSet):
|
|
search = filters.CharFilter(field_name='name', lookup_expr='icontains', help_text='Search by city name.')
|
|
|
|
class Meta:
|
|
model = City
|
|
fields = ['search']
|
|
|
|
|
|
class NeighborhoodFilter(filters.FilterSet):
|
|
city = filters.UUIDFilter(field_name='city__uuid', help_text='Filter by city UUID.')
|
|
search = filters.CharFilter(method='filter_search', help_text='Search by neighborhood or city name.')
|
|
|
|
class Meta:
|
|
model = Neighborhood
|
|
fields = ['city', 'search']
|
|
|
|
def filter_search(self, queryset, name, value):
|
|
return queryset.filter(Q(name__icontains=value) | Q(city__name__icontains=value))
|