Django将查询结果附加到查询集

Dar*_*ech 3 django django-queryset

在我构建的视图中,我需要咨询多个数据库.我想要做的是使用query_set的结果来搜索另一个db表.

我有mydb1_query_set功能,我现在需要的是这样的:

for row in mydb1_query_set:
        mydb2_query_set = Mytable.objects.filter(id=row.id)
Run Code Online (Sandbox Code Playgroud)

因此,当我迭代时,我不断添加到最初为空的mydb2_query_set.我意识到没有QuerySet.append,所以我如何实现我想要的?任何帮助非常感谢...

小智 10

qs1= <QuerySet [<User: 1@gmail.com>, <User: 2@gmail.com>]>
qs2= <QuerySet [<User: 3@gmail.com>, <User: 4@gmail.com>]>
qs3 = qs1 | qs2
Run Code Online (Sandbox Code Playgroud)

资源:

qs3 = <QuerySet [<User: 1@gmail.com>, <User: 2@gmail.com>, <User:3@gmail.com>, <User: 4@gmail.com>]>
Run Code Online (Sandbox Code Playgroud)

编辑:链接到文档:

https://docs.djangoproject.com/en/2.1/ref/models/querysets/#operators-that-return-new-querysets

  • 虽然这可能会回答作者的问题,但它缺少一些解释性词语和文档链接。如果没有一些短语,原始代码片段不是很有帮助。您可能还会发现 [如何写出好的答案](https://stackoverflow.com/help/how-to-answer) 非常有帮助。请编辑您的答案。 (3认同)

Ala*_*air 8

使用a list而不是a queryset,然后你可以append或extend如你所愿.

mydb2_query = []
for row in mydb1_query_set:
    mydb2_query.extend(list(Mytable.objects.filter(id=row.id)))
Run Code Online (Sandbox Code Playgroud)

  • 但这很慢,您不强制查询集在每个项目中命中数据库吗? (2认同)