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

时间:2016-08-29 15:13:58

标签: python 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逻辑很可能是错误的。但是,如何连接过滤器请求以避免重复的模型结果。

1 个答案:

答案 0 :(得分:1)

您可能想要使用distinct过滤器。