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
2条答案
按热度按时间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/#icontainskrcsximq2#
默认情况下django使用精确匹配过滤数据如果你想使用部分查询匹配过滤,你需要添加图标查找表达式
包含从查询集中提供的筛选器数据,具有部分字符串匹配。
所以,你的代码变成这样...
您需要添加
lookup_expr='icontains'
,而不是lookup_expr='street'