我正在使用第 3 方 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 默认为精确的,但我认为我正在下面更改它。我尝试过 contains 和 icontains。 搜索传递到 url,例如:“...blog/?title=foo”。我手动输入了“.../blog/?title__icontains=foo” url,这可以工作,但是工作 url 不是我单击搜索按钮后传递的 url。 任何帮助将不胜感激,谢谢。
*编辑:需要明确的是,过滤器正在工作,但它的工作方式就好像它是“精确”而不是“包含”。它会找到结果,但前提是我搜索完整标题
最佳答案
哈利,
您是否尝试过 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,
},
},
}
关于python - Django-filter 'icontains' 没有传递到我的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115515/