Как обычно документация django rest framework не изобилует

Сегодня наша задача достаточна простая:

  • Задать переменные во ModelViewSet исходя из данных request
  • передать Request данные в сериализзатор.

Цель этого безумия: менять сериализаторы, в зависимости от текущего пользователя и избавить код от повторений

Для изменения параметров воспользуемся известным методом super

class QView(viewsets.ModelViewSet):
  user = None

  def dispatch(self, request, *args, **kwargs):
      self.user = get_user_by_token(request.META.get('HTTP_TOKEN'))
      return super(QView, self).dispatch(request, *args, **kwargs)

Теперь передадим параметры пользователя в сериализатор:

def retrieve(self, request, pk=None):
  instance = self.get_object()
  serializer = self.get_serializer_class()(instance, context={'user': self.user})
  return Response(serializer.data)

Чтобы в сериализаторе узнать значения, напишем небольшой callback:

class QSerializer(serializers.ModelSerializer):
  user = serializers.SerializerMethodField('get_this_user')

  def get_this_user(self, obj):
      return self.context[‘user’].email

  class Meta:
      model = Q
      fields = ( 'user')

Мы всегда рады вашим вопросам и замечаниям.


Комментарии

Комментарии отсутствуют
У Вас есть вопросы?
Давайте обсудим их! Продумаем! Сделаем!
Напишите прямо сейчас!

Новый комментарий

Имя:
:

Смотрите также:

Нет изображения

Django Rest Framework, пишем связи

Создаем правильное JSON дерево
Нет изображения

DRF. Вложенные шаблонизаторы с возможностью записи

Изобретаем велосипед в django rest framework. Записываем вложенные объеккты
Нет изображения

Инициализация данных ModelViewSet в Django REST Framework

Задаем значения параметров вьюшки по умолчанию
Первый контакт с нами