我制作了一个过滤器,您可以在其中搜索不同的关键字并且有效。
我的问题是,当我尝试搜索多个关键字时。
如何过滤搜索以便将每个单词分开?
以下是它的外观:
第一张图片显示我只搜索一个关键字,第二张图片显示我搜索两个关键字时:
以下是我的模型类代码:
class Task(managers.Model):
keywords = models.ManyToManyField('Keyword', blank=True, related_name='event_set')
objects = managers.DefaultSelectOrPrefetchManager.from_queryset(managers.TaskQuerySet)()
这是我的Filter类:
class TaskFilterSet(BaseFilterSet):
keywords = django_filters.MethodFilter(action="filter_keywords")
class Meta:
model = models.Task
def filter_keywords(self, queryset, value):
from django.db.models import Q
return queryset.filter(Q(keywords__word__icontains=value))
答案 0 :(得分:1)
让我们假设您要搜索以下关键字:foo
和boo
。你有以下关系:
search['foo','boo']
object.keywords['foo','boo','woo']
您可以对object.keywords
进行迭代,看看您所拥有的某个搜索对象是否与keywords
中的object
匹配。如果是,则返回包含该对象的filter
。