在我构建的视图中我需要咨询多个数据库。我想要做的是使用query_set的结果来搜索另一个db表。
我的功能 mydb1_query_set ,我现在需要的是这样的:
for row in mydb1_query_set:
mydb2_query_set = Mytable.objects.filter(id=row.id)
因此,当我迭代时,我不断添加到最初为空的 mydb2_query_set 。我意识到没有QuerySet.append
,所以我如何实现我的目标?任何帮助非常感谢...
答案 0 :(得分:8)
使用list
代替queryset
,然后您可以append
或extend
。
mydb2_query = []
for row in mydb1_query_set:
mydb2_query.extend(list(Mytable.objects.filter(id=row.id)))
答案 1 :(得分:2)
qs1= <QuerySet [<User: 1@gmail.com>, <User: 2@gmail.com>]>
qs2= <QuerySet [<User: 3@gmail.com>, <User: 4@gmail.com>]>
qs3 = qs1 | qs2
res:
qs3 = <QuerySet [<User: 1@gmail.com>, <User: 2@gmail.com>, <User:3@gmail.com>, <User: 4@gmail.com>]>
编辑:链接至文档:
https://docs.djangoproject.com/en/2.1/ref/models/querysets/#operators-that-return-new-querysets
答案 2 :(得分:0)
使用python内置的itertools
模块对我来说效果最好。
from itertools import chain
qs1 = Mytable.objects.filter(id=2)
qs2 = Mytable.objects.filter(id=3)
all_queries = chain(qs1, qs2)
以下是文档,以备不时之需:https://docs.python.org/3/library/itertools.html#itertools.chain
答案 3 :(得分:0)
Django 的 Managers 对象 provide a default method 称为 .get_queryset()
,它允许您在它之后连接额外的查询:
queryset = MyModel.objects.get_queryset()
if username:
queryset = queryset.filter(username=username)
if country:
queryset = queryset.filter(country=country)
您可以轻松地使用 .query
属性获取 SQL,例如:
>>> print(queryset.query)
SELECT `myapp_mymodel`.`id`, `myapp_mymodel`.`username`, `myapp_mymodel`.`country` FROM `myapp_mymodel` WHERE `myapp_mymodel`.`country` = foo