在DRF中动态设置renderer_class

时间:2019-02-05 13:16:12

标签: django-rest-framework

如何从请求查询参数动态设置DRF中的POST persons/_update_by_query?conflicts=proceed { "query": { "term": {"person_id": 249917} }, "script": { "inline": "ctx._source.dri_for_buyers = 4" } }

我知道DRF基于ACCEPT标头选择了renderer_class,但是客户端已请求一个选项来基于GET查询参数选择类

2 个答案:

答案 0 :(得分:0)

这可以通过在视图上覆盖get_format_suffix函数来实现。

class MyView(APIView):

    self.format_suffix = 'format'

    def get_format_suffix(self, **kwargs):
        return self.request.query_params.get(self.format_suffix)

答案 1 :(得分:0)

render_class是APIView中可用的属性,并且是一个列表,而不是元组,因此应该是可变的。

from rest_framework.renderers import JSONRenderer

available_render_dicts = {'json': JSONRenderer}

class SomeAPIView(APIView):

    renderer_classes = []

    def get_format_suffix(self, **kwargs):
       format = self.request.query_params.get(self.format_suffix)
       self.render_classes = available_render_dicts[format]
       super().get_format(**kwargs)