搜索数据库后,我最终得到了一组查询集。我想连接这些查询集,就像我们可以用list元素做的那样。这是可能的还是有更好的方法来做到这一点?这里的最终目标是获取包含字段中一组字符串之一的表行的查询集。
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
myQuerySetTwoD.append(my.objects.filter(asn=filterString))
for j in range(0,(len(myQuerySetTwoD)-1)):
myQuerySet = myQuerySet + myQuerySetTwoD[j]
更新:找到我自己的答案(可能会把问题写下来)
只需
from itertools import chain
然后替换
myQuerySet = myQuerySet + myQuerySetTwoD[j]
与
BgpAsnList = chain(BgpAsnList,BgpAsnListTwoD[j])
答案 0 :(得分:5)
我认为正确的方法是使用|
运算符(即,如果QuerySet
的类型相同):
qset = MyModel.objects.none()
for filterString in list_of_filterStrings:
qset_temp = MyModel.objects.filter(asn=filterString)
qset = qset | qset_temp
答案 1 :(得分:0)
您的代码看起来很奇怪!我不知道它是如何工作的以及你在这里做了什么,但这里是我将如何做查询的事情:
from django.db.models import Q
myQuery = Q()
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
myQueryTwoD.append(Q(asn=filterString))
for j in range(0,(len(myQueryTwoD)-1)):
myQuery = myQuery | myQueryTwoD[j]
myQuerySet = my.objects.filter(myQuery)
它是如何运作的?
Blagh.objects.filter(Q(smth='A') | Q(smth='B'))
will generate query which looks like:
SELECT ... from blagh WHERE smth = 'A' OR smth = 'B'
看看django docs:Complex lookups with Q
object
使用itertools
的方法将导致对数据库的许多查询。使用我的解决方案,它将是OR
子句中WHERE
查找的一个查询。
也许更好的解决方案是这样的:
strings = []
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
strings.append(filterString)
my_query_set = MyModel.objects.filter(arn__in=strings)
我无法理解为什么你需要内循环......