Встречается на собеседованиях • сегодня

Как кастомизировать вывод данных в ModelViewSet

Для кастомизации вывода данных в ModelViewSet можно переопределить методы сериализации или использовать разные сериализаторы для разных действий.

  1. Переопределение get_serializer_class:
python
class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    
    def get_serializer_class(self):
        if self.action == 'list':
            return UserListSerializer
        return UserDetailSerializer
  1. Кастомизация через serializer_class:
python
class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        serializer = CustomListSerializer(queryset, many=True)
        return Response(serializer.data)
  1. Динамические поля через to_representation в сериализаторе:
python
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
    
    def to_representation(self, instance):
        data = super().to_representation(instance)
        if self.context['request'].method == 'GET':
            data.pop('password')
        return data
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы