Django Rest Framework ViewSets:在Response中包含任意上下文内容

时间:2016-10-25 17:19:51

标签: django django-rest-framework

如何在所有ViewSet方法中使用其他任意内容初始化Response(),而不是单独覆盖每个方法?

用例:我想包含任意内容(在本例中是一个Form对象以及Rest Framework ViewSet响应中的序列化结果。

我知道如果我覆盖单个ViewSet方法(例如列表),这很容易:

def list():
    serializer = FooSerializer()
    context = {
      'form': BarForm(), 
      'data': serializer.data
      }
    return Response(context)

我也知道我可以使用get_serializer_context()方法here

使用其他上下文填充序列化程序
class FooSerializer(serializers.ModelSerializer):
    ...
    def get_serialzier_context(self):
        context = {'form': BarForm()}
        return context

这确实传递给了序列化程序

我也知道我可以覆盖Serializer类上的to_representation()方法,并使用我的任意上下文来进一步操作实例级别的序列化数据,但这不是我想要的。

我还探讨了get_renderer_context()方法as described here的使用,但这还没有结果。

我甚至查看了rest_framework / pagination.py代码,因为它将'previous','next'和'count'属性注入上下文中:

def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('next', self.get_next_link()),
            ('previous', self.get_previous_link()),
            ('results', data)
        ]))

以上提供了关于使用传递值创建Response实例的非常好的线索 - 这正是我在第一个示例中在ViewSet的list()方法中所做的。

所以我想这个问题最好归结为

  

如何使用此任意内容初始化Response()   跨所有ViewSet方法,不会超越每个方法   单独?

0 个答案:

没有答案