Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可以连接查询集吗?_Python_Django - Fatal编程技术网

Python 可以连接查询集吗?

Python 可以连接查询集吗?,python,django,Python,Django,搜索数据库后,我得到一个查询集数组。我想连接这些查询集,就像我们可以使用列表元素一样。这是可能的还是有更好的方法?这里的最终目标是为包含字段中一组字符串之一的表行获取queryset for i in range(0,(searchDiff+1)): filterString = str(int(searchRange[0]) + i) myQuerySetTwoD.append(my.objects.filter(asn=filterString)) for j in

搜索数据库后,我得到一个查询集数组。我想连接这些查询集,就像我们可以使用列表元素一样。这是可能的还是有更好的方法?这里的最终目标是为包含字段中一组字符串之一的表行获取queryset

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]
更新:找到了我自己的答案(可能是关于写下问题的内容)

只是

然后替换

myQuerySet = myQuerySet + myQuerySetTwoD[j]


你的代码看起来很奇怪!我不知道它是如何工作的,也不知道您在这里做什么,但以下是我将如何执行查询操作:

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文档:

使用
itertools
的方法将导致对数据库的许多查询。在我的解决方案中,它将是一个带有
查找
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)

我不明白为什么需要内部循环…

我认为正确的方法是使用
操作符(即,如果
查询集
属于同一类型):


为什么有内环呢?当我卡在“链”中时,它几乎可以正常工作,但你完全纠正了效率。最好使查询更加智能化,而不是运行多个查询的循环。谢谢,这帮了大忙。忽略我的代码。你上面所说的正是我所需要的。我刚在那里试过。一个问题。这个房间很整洁。我想我也可以对多个Q()进行OR运算,但我也很难让它工作__他第一次工作。
Blagh.objects.filter(Q(smth='A') | Q(smth='B'))
  will generate query which looks like:
SELECT ... from blagh WHERE smth = 'A' OR smth = 'B'
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)
qset = MyModel.objects.none()
for filterString in list_of_filterStrings:
    qset_temp = MyModel.objects.filter(asn=filterString)
    qset = qset | qset_temp