Я хочу манипулировать результатом сериализации many=True
сериализации:
class CustomContentElementSerializer(serializers.ModelSerializer):
class Meta:
model = CustomContentElement
fields = [
'type',
'html'
]
result = CustomContentElementSerializer(
CustomContentElement.objects.all(),
many=True
)
Я не хочу манипулировать результатом сериализации отдельного объекта, а полным списком. С функцией переопределения to_representation
я просто могу манипулировать отдельными элементами возвращаемого списка.
Я думаю, что это сложно, потому что класс ModelSerializer
устанавливает базовый класс в конструкторе (Строка 117: https://github.com/encode/django-rest-framework/blob/master/rest_framework/serializers.py)
Есть ли у кого-нибудь идея, как можно было бы манипулировать результатом в конце для many=True
сериализации?
Решение (спасибо @ MSR974):
class CustomContentElementListSerializer(serializers.ListSerializer):
def to_representation(self, data):
data = super().to_representation(data)
return self.manipulate_list_representation(data)
def manipulate_list_representation(self, data):
data.reverse()
return data
class CustomContentElementSerializer(serializers.ModelSerializer):
image = FilerImageFieldSerializer()
class Meta:
list_serializer_class = CustomContentElementListSerializer
model = CustomContentElement
fields = [
'type',
'col_id',
]
Это в документации по адресу https://www.django-rest-framework.org/api-guide/serializers/#customizing -listserializer-behavior