使用Django reduce(or_)-如何将结果为0的不匹配查询存储在变量中



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

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

我想处理数据库中没有用户输入的情况。由于results符合现有条件,我如何检查上面的代码是否未能为查询找到至少一个匹配的结果,并将该查询存储在变量中?例如,如果results查询我的数据库以获得以下列表:[‘one’,‘two’,‘thee’],假设‘you’不在我的数据库中,但其他两个在,我想将字符串"you"存储在一个变量中,以便以后使用

您可以简单地将results计算为布尔值:

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

来自QuerySet的文档:

bool()。在布尔上下文中测试QuerySet(例如使用bool()(,orandif语句将导致执行查询。如果至少有一个结果,QuerySetTrue,否则为False。例如:

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

您可以为查询添加一个查询:

例如:

query=query.append(Q(name__isnul=True((或总是False 的东西

与其尝试这样做,不如使用一段代码:

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

我反复检查查询中的每个项目,并检查它是否存在

for each in query:
r = results.filter(name__icontains=each)
if r.exists() == False:
Do something with each

虽然没有我希望的那么高效,但它现在解决了的问题

最新更新