gpt4 book ai didi

python - 过滤 Django 数据库中包含数组中任何值的字段

转载 作者:IT老高 更新时间:2023-10-28 20:50:06 25 4
gpt4 key购买 nike

我有一个 django 模型和一个代表用户全名的字段。我的客户希望我设置一个过滤器,以根据字符串数组搜索用户,其中所有字符串都必须在全名中不区分大小写。

例如

如果用户 full_name = "Keith, Thomson S."

我有一个列表['keith','s','thomson']

我想执行过滤器等效

Profile.objects.filter(full_name__icontains='keith',full_name__icontains='s',full_name__icontains='thomson')

问题是这个列表可以是动态大小的——所以我不知道该怎么做。

有人有什么想法吗?

最佳答案

连续调用 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)

关于python - 过滤 Django 数据库中包含数组中任何值的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com