我正在使用第三方Django过滤器为我的博客文章创建搜索栏。
import django_filters
from .models import Post
from django.db import models
class PostFilter(django_filters.FilterSet):
title = django_filters.CharFilter(field_name='title')
class Meta:
model = Post
fields = {
'title': ['icontains'],
}
#I've tried using filter_overrides to no success
filter_overrides = {
models.CharField: {
'filter_class': django_filters.CharFilter,
'extra': lambda f: {
'lookup_expr': 'icontains',
},
}
}
我读到CharFilter和TextFilter默认为精确,但是我认为我在下面进行更改。我试过包含和icontains。 搜索正在传递到URL,例如:“ ... blog /?title = foo”。我已经手动键入了“ ... / blog /?title__icontains = foo” URL,并且可以正常工作,但是单击我的搜索按钮后,正在传递的URL不是工作URL。 任何帮助将不胜感激,谢谢。
* edit:显然,该过滤器正在工作,但它好像在“完全”而不是“包含”。它会找到结果,但前提是我要搜索完整的标题
答案 0 :(得分:0)
哈里
您是否尝试过django-filter定义的替代?
class ProductFilter(django_filters.FilterSet):
class Meta:
model = Product
fields = {
'name': ['exact'],
'release_date': ['isnull'],
}
filter_overrides = {
models.CharField: {
'filter_class': django_filters.CharFilter,
'extra': lambda f: {
'lookup_expr': 'icontains',
},
},
models.BooleanField: {
'filter_class': django_filters.BooleanFilter,
'extra': lambda f: {
'widget': forms.CheckboxInput,
},
},
}