Django-filter находит совпадение, если вы вводите полное имя
django-filter находит совпадение, если вы вводите полное имя. Например, я пытаюсь фильтровать по названию "Titanic" и ввожу в поиск "Titan", ничего не будет найдено, пока я не введу полный текст "Titanic". Как мне искать по частичному совпадению?
class ProjectFilter(django_filters.FilterSet):
address__name = django_filters.CharFilter(field_name='address', lookup_expr='street')
approve = django_filters.BooleanFilter(field_name='approve')
ordering = django_filters.OrderingFilter(choices=CHOICES, required=True, empty_label=None,)
class Meta:
model = Project
exclude = [field.name for field in Project._meta.fields]
order_by_field = 'address'
Вид
class FilterTable(SingleTableMixin, FilterView):
table_class = TableAll
model = Project
template_name = "table.html"
filterset_class = ProjectFilter
По умолчанию он использует exact
поиск. https://django-filter.readthedocs.io/en/stable/ref/filters.html#lookup-expr Попробуйте использовать icontains
например https://docs.djangoproject.com/en/4.1/ref/models/querysets/#icontains
По умолчанию django фильтрует данные с точным совпадением, если вы хотите фильтровать с частичным совпадением запроса, вам нужно добавить выражение поиска icontains
содержит предоставленные данные фильтра из набора запросов с частичным совпадением строк.
Итак, ваш код становится таким...
Необходимо добавить lookup_expr='icontains'
вместо lookup_expr='street'
class ProjectFilter(django_filters.FilterSet):
address__name = django_filters.CharFilter(field_name='address', lookup_expr='icontains')