如何在所有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方法,不会超越每个方法 单独?