首页 > 解决方案 > 使用 Django reduce(or_) - 如何将结果为 0 的不匹配查询存储在变量中

问题描述

我有一个函数,它从数据列表中获取用户的输入,并在我的数据库中搜索与用户输入匹配的任何项目,并返回我的数据库中的所有结果:

results = results.filter(
        reduce(or_, (Q(name__icontains=itm.strip()) for itm in query))
    )

我想处理我的数据库中不存在用户输入的情况。由于resultsfitlers 已经存在,我如何检查上述代码是否未能找到至少一个匹配的查询结果,并将该查询存储在变量中?例如,如果在results我的数据库中查询以下列表:['one', 'two', 'thee'],假设 'thee' 不在我的数据库中,但其他两个在我的数据库中,我想存储字符串“thee” " 在一个变量中以供以后使用

标签: djangodjango-filterdjango-q

解决方案


您可以简单地评估results为布尔值:

if not results:
    print('No match found.')

来自QuerySet的文档

bool(). 在布尔上下文中测试 a QuerySet,例如 using bool()、 或语句or,将导致执行查询。如果至少有一个结果,则为,否则为。例如:andifQuerySetTrueFalse

if Entry.objects.filter(headline="Test"):
    print("There is at least one Entry with the headline Test")

推荐阅读