使用 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))

假设您要搜索以下关键字:fooboo。你有以下关系:

search['foo','boo']
object.keywords['foo','boo','woo']

您可以遍历 object.keywords 并查看您拥有的搜索对象之一是否与 object 中的 keywords 之一相匹配。如果是,则您 return 包含该对象的 filter