我有一个函数可以从数据列表中获取用户的输入,并在数据库中搜索与用户输入匹配的所有项目,然后返回数据库中的所有结果:
results = results.filter(
reduce(or_, (Q(name__icontains=itm.strip()) for itm in query))
)
我想处理数据库中不存在用户输入的情况。由于results
可以解决现有问题,我该如何检查以上代码是否未能找到查询的至少一个匹配结果,并将该查询存储在变量中?例如,如果results
在我的数据库中查询以下列表:['one','two','thee'],假设'thee'不在我的数据库中,但另外两个在我的数据库中,我想将字符串“ thee”存储在变量中以供以后使用
答案 0 :(得分:1)
您可以简单地将results
评估为布尔值:
if not results:
print('No match found.')
bool()
。在布尔上下文中测试QuerySet
,例如使用bool()
,or
,and
或if
语句将导致查询被执行。如果 至少有一个结果,QuerySet
为True
,否则为False
。 例如:if Entry.objects.filter(headline="Test"): print("There is at least one Entry with the headline Test")
答案 1 :(得分:0)
您可以为查询添加一个查询:
例如:
query = query.append(Q(name__isnull = True))或总是错误的东西
答案 2 :(得分:0)
而不是尝试执行一段代码:
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
尽管效率不如我所愿,但它现在可以解决问题