使用 Django 过滤器搜索多个单词时该怎么办
What to do when searching on more than one word with django filter
我制作了一个过滤器,您可以在其中搜索不同的关键字并且它有效。
我的问题是,当我尝试搜索多个关键字时。
如何过滤搜索以分隔每个单词?
这是一张图片:
第一张图是我只搜索一个关键字时的情况,第二张图是我搜索两个关键字时的情况:
这是我的模型代码 class:
class Task(managers.Model):
keywords = models.ManyToManyField('Keyword', blank=True, related_name='event_set')
objects = managers.DefaultSelectOrPrefetchManager.from_queryset(managers.TaskQuerySet)()
这是我的过滤器 class:
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))
假设您要搜索以下关键字:foo
和 boo
。你有以下关系:
search['foo','boo']
object.keywords['foo','boo','woo']
您可以遍历 object.keywords
并查看您拥有的搜索对象之一是否与 object
中的 keywords
之一相匹配。如果是,则您 return 包含该对象的 filter
。
我制作了一个过滤器,您可以在其中搜索不同的关键字并且它有效。
我的问题是,当我尝试搜索多个关键字时。
如何过滤搜索以分隔每个单词?
这是一张图片:
第一张图是我只搜索一个关键字时的情况,第二张图是我搜索两个关键字时的情况:
这是我的模型代码 class:
class Task(managers.Model):
keywords = models.ManyToManyField('Keyword', blank=True, related_name='event_set')
objects = managers.DefaultSelectOrPrefetchManager.from_queryset(managers.TaskQuerySet)()
这是我的过滤器 class:
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))
假设您要搜索以下关键字:foo
和 boo
。你有以下关系:
search['foo','boo']
object.keywords['foo','boo','woo']
您可以遍历 object.keywords
并查看您拥有的搜索对象之一是否与 object
中的 keywords
之一相匹配。如果是,则您 return 包含该对象的 filter
。