我有一个Django模型和一个表示用户全名的字段.我的客户希望我设置一个过滤来根据字符串数组搜索用户,其中所有字符串数组都必须不区分大小写,并包含在全名中.

例如

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

我有一张 list ['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)

Django相关问答推荐

基于Django类的视图:除非登录,否则拒绝访问future 日期

获取 Django (postgres) 中带注释字段的平均值

无法迁移,模型中的外键导致了问题

Django ModelForm提交按钮不起作用

未为部署的 django rest 框架加载静态文件

Django 表单有 Select 但也有自由文本选项?

如何在 django tests.py 中创建管理员用户

如何在 django 中处理这种竞争条件?

Django聚合:仅求和返回值?

如何在 Django 模板上实现 back链接?

Django:如何从模板调用视图函数?

在 django web 应用程序中,如何给用户自己的子域?

可以在 github 页面上托管 django 站点吗?

Django - 如何从模型实例中获取管理员 URL

使用 Gunicorn 运行 Django - 最佳实践

在 Celery 任务中运行 Scrapy 蜘蛛

如何在 Django 中使用动态外键?

Django模板转换为字符串

为什么我的 Django 单元测试不知道安装了 MessageMiddleware?

django 应用基于条件的样式类