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')
Вернуться на верх