如何从 Django 中的 get_queryset 方法返回多个查询集对象或添加查询集结果

Posted

技术标签:

【中文标题】如何从 Django 中的 get_queryset 方法返回多个查询集对象或添加查询集结果【英文标题】:How to return multiple queryset object or add queryset result from get_queryset method in Django 【发布时间】:2016-04-13 10:39:55 【问题描述】:

在我的 django 应用程序中,我定义了一个具有 get_queryset 方法的 ViewSet:

class SampleViewSet(ReadOnlyModelViewSet):
    serializer_class = SampleSerializer
    permission_classes = (IsAuthorizedToAccess, )

    def get_queryset(self):
        queryset = Sample.objects.filter(submitted_by=self.request.user.id)
        queryset1 = Sample.objects.filter(submitted_by!=self.request.user.id) 
        return queryset

这样我有两个查询集对象,第一个是用户提交的样本,第二个是其他用户提交的样本。 这个 SampleViewSet 是从我使用返回的查询集对象的 ajax 请求中调用的。

你能帮我如何返回这两个对象吗?

我尝试的是打印 queryset 对象并尝试通过创建类似于 queryset 的 json 对象来愚弄 django。但似乎 django 很聪明地捕捉到了这一点。

编辑:问题是我应该寻找 get_queryset 的替代方法,如 list() [来自 Django Rest 框架] 并使用 Httpresponse 返回 json,或者是否有一个真正的解决方案来组合两个查询集对象并从这里返回。

【问题讨论】:

你想要达到的最终结果是什么?将这两个查询集链接在一起并呈现为单个 JSON 列表? 我想获得两个单独的样本列表(来自查询集),一个由用户提交,第二个由其他用户提交。 当然可以,但是接下来你要如何处理它们?你能给我们展示一个“理想”的 JSON 样本吗? 【参考方案1】:

直到作者没有提炼问题,第一个猜测是:

from itertools import chain

def get_queryset(self):
    queryset = Sample.objects.filter(submitted_by=self.request.user.id)
    queryset1 = Sample.objects.filter(submitted_by!=self.request.user.id) 
    return chain(queryset, queryset1)

【讨论】:

非常抱歉迟到了,因为我失去了网络连接。一旦我从这里返回 queryset 和 queryset1,我想单独访问这两个。即如果我链接这两个对象,有什么办法可以解开它们。我将在 javascript 文件中使用它们。 @AmanGupta 如果您有解决方案,请在此处发表评论。我也想通过 get_queryset 返回两个查询集对象,但无法这样做。【参考方案2】:

没有chain,你可以这样管理:

def list(self, request):
    client = Client.objects.all()
    server = Server.objects.all()
    serializer1 = self.serializer_class(server, many=True)
    serializer2 = self.serializer_class(client, many=True)
    Serializer_list = [serializer1.data, serializer2.data]
    return Response(Serializer_list)

【讨论】:

以上是关于如何从 Django 中的 get_queryset 方法返回多个查询集对象或添加查询集结果的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 中的 sql 模式生成数据模型?

如何从 django 中的 manage.py 调用不同的设置

如何从 Django 中的编辑表单更新对象?

Django 应用程序视图 - 如何从 url 中的 django 数据库中获取条目并从数据库中获取更多视图信息?

Django - 如何从模板中的查询集中获取最后一项

查询 Django 模型时,如何将 Django 中的 DateTimeField 从 UTC 转换为最终用户的时区(通常是 PST)?