В Django REST Framework, используя ModelViewSet с средствами визуализации,

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

Я использую ModelViewSet и пытаюсь настроить стандарт рендеринга. В документации не показано, как использовать ModelViewSet с средствами визуализации drf. Я хочу, чтобы вывод был такого формата:

 Format : {'message': <custom message>, 'data': <output from ModelViewSet>}
 

Код:

 class PostViewSet(viewsets.ModelViewSet):
    serializer_class = PostSerializer
    queryset = Post.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    renderer_classes = [GenericAPIRenderer]

# How to Override?
class GenericAPIRenderer(renderers.JSONRenderer):
    charset = 'utf-8'

    def render(self, data, media_type=None, renderer_context=None):
        pass
 

Ответ №1:

Что-то вроде этого работает без каких-либо проблем,

 class GenericAPIRenderer(renderers.JSONRenderer):
    charset = 'utf-8'

    def render(self, data, accepted_media_type=None, renderer_context=None):
        updated_data = {'message': "some custom message", 'data': data}
        return super().render(updated_data, accepted_media_type, renderer_context) 

Комментарии:

1. Как мне передать пользовательское сообщение со уровня представления?

2. если вы хотите ввести «пользовательское сообщение * из представления, тогда лучше переопределить соответствующие методы

3. @AshfaqUrRahmanN renderer_context кажется подходящим местом для передачи дополнительной информации или добавления собственного параметра

4. @ArakkalAbu Согласно документам для renderer_context : «По умолчанию это будет включать следующие ключи: просмотр, запрос, ответ, аргументы, kwargs.». Похоже, он должен содержать необходимые данные. django-rest-framework.org/api-guide/renderers /…

5. Я не знал об этом, спасибо за информацию @IainShelvington