Как кастомизировать вывод данных в ModelViewSet
Python
Middle
Без компании
Как кастомизировать вывод данных в ModelViewSet
Ответы
Для кастомизации вывода данных в `ModelViewSet` можно переопределить методы сериализации или использовать разные сериализаторы для разных действий.
- **Переопределение `get_serializer_class`**:
```
class UserViewSet(ModelViewSet):
queryset = User.objects.all()
def get_serializer_class(self):
if self.action == 'list':
return UserListSerializer
return UserDetailSerializer
```
- **Кастомизация через `serializer_class`**:
```
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)
```
- **Динамические поля через `to_representation`** в сериализаторе:
```
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
```