首页 > 解决方案 > Django - 如何将多个过滤器参数组合在一起,其中参数的数量是可变的

问题描述

我正在尝试在 Django 上实现搜索功能。如果我的查询是:“ab c”,那么我想搜索:

select * from table where col LIKE '%a%' and col LIKE '%b%' and col LIKE '%c%'

我知道我可以做到这一点

table.objects.filter(col__icontains('a'))

但是我如何使这个工作适用于 a、b 和 c。我不能硬编码参数的数量。可能有 a、b、c、d 或任意数量的搜索词。?

标签: pythonpython-3.xdjango

解决方案


您可以在循环中链接查询集上的过滤器以获取多个AND过滤器

query = 'a b c'
queryset = table.objects.all()
for part in query.split():
    queryset = queryset.filter(col__icontains=part)

推荐阅读