在django中使用循环连接过滤器请求



我有一个字符串列表,我需要确定它们是否出现在我的模型名称中。目前,我正在使用一系列if和elif语句来确定我的字符串列表中有多少字符串,然后像这样向我的数据库执行过滤器请求(这有效,但效率极低,因为我不断重复自己):

#example if my list contained only 2 strings
if len(listOfStrings) == 2:

    queryResults = MyModel.objects.filter(Q(name__contains=listOfStrings[0])|Q(name__contains=listOfStrings[1]))

然后根据这些查询的结果通知客户端。如果我对每个模型分别测试字符串,我可能会得到相同的模型(因为一些模型名称包含所有三个或两个字符串),然后通知客户两次。所以我想用for循环来解决这个问题就像这样

listOfStrings = {"string1","string2","string3"}
queryResults = ""
for string in listOfStrings:
    queryResults += MyModel.objects.filter(name__contains=string)

我理解filter()方法是懒惰的,不会立即执行,这个python逻辑很可能是错误的。但是,我如何连接过滤器请求,以避免重复的模型结果。

您可能需要使用不同的过滤器

最新更新