我有一个函数,它从数据列表中获取用户的输入,并在数据库中搜索与用户输入匹配的任何项目,并返回数据库中的所有结果:
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()
(,or
、and
或if
语句将导致执行查询。如果至少有一个结果,QuerySet
为True
,否则为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
虽然没有我希望的那么高效,但它现在解决了的问题