django-filter会在你输入全名时找到匹配项

oknwwptz  于 2023-01-27  发布在  Go
关注(0)|答案(2)|浏览(174)

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
hzbexzde

hzbexzde1#

默认情况下,它使用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

krcsximq

krcsximq2#

默认情况下django使用精确匹配过滤数据如果你想使用部分查询匹配过滤,你需要添加图标查找表达式
包含从查询集中提供的筛选器数据,具有部分字符串匹配。
所以,你的代码变成这样...
您需要添加lookup_expr='icontains',而不是lookup_expr='street'

class ProjectFilter(django_filters.FilterSet):
    address__name = django_filters.CharFilter(field_name='address', lookup_expr='icontains')

相关问题