过滤 Django 数据库中包含数组中任何值的字段
回答问题 我有一个 django 模型和一个代表用户全名的字段。我的客户希望我设置一个过滤器,以根据字符串数组搜索用户,其中所有字符串都必须不区分大小写,包含在全名中。 例如 如果一个用户full_name = "Keith, Thomson S." 我有一个列表['keith','s','thomson'] 我想执行相当于的过滤器 Profile.objects.filter(full_name
·
回答问题
我有一个 django 模型和一个代表用户全名的字段。我的客户希望我设置一个过滤器,以根据字符串数组搜索用户,其中所有字符串都必须不区分大小写,包含在全名中。
例如
如果一个用户full_name = "Keith, Thomson S."
我有一个列表['keith','s','thomson']
我想执行相当于的过滤器
Profile.objects.filter(full_name__icontains='keith',full_name__icontains='s',full_name__icontains='thomson')
问题是这个列表可以是动态大小的——所以我不知道该怎么做。
有人有想法么?
Answers
连续调用filter
,如下所示:
queryset = Profile.objects.all()
strings = ['keith', 's', 'thompson']
for string in strings:
queryset = queryset.filter(full_name__icontains=string)
或者,您可以将一堆Q
对象一起使用&
:
condition = Q(full_name__icontains=s[0])
for string in strings[1:]:
condition &= Q(full_name__icontains=string)
queryset = Profile.objects.filter(condition)
一种更神秘的写法,避免显式循环:
import operator
# ...
condition = reduce(operator.and_, [Q(full_name__icontains=s) for s in strings])
queryset = Profile.objects.filter(condition)
更多推荐
已为社区贡献126473条内容
所有评论(0)