我有一个实现BaseSerializer
类的序列化程序,在该类中,我正在使用to_representation
函数进行如下函数调用:
class ItemSerializer(serializers.BaseSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['log'] = SERVICE.log(instance.id)
return ret
class Meta:
list_serializer_class = ItemListSerializer
model = models.Item
fields = '__all__'
我也有相同的ItemListSerializer
的列表序列化器,如下所示:
class ItemListSerializer(serializers.ListSerializer):
def create(self, validated_data):
items = [models.Item(**item) for item in validated_data]
return models.Item.objects.bulk_create(items)
我想做的是在要获取项目的整个列表时覆盖to_representation
中的ItemSerializer
方法。我基本上是想避免对每个项目进行函数调用,而是出于性能原因而在请求项目列表时对所有项目进行批量调用。
有没有很好的方法可以做到这一点?我遵循这些文档来创建ItemListSerializer
:https://www.django-rest-framework.org/api-guide/serializers/#customizing-listserializer-behavior,但是它仅涉及重写create和update方法。
答案 0 :(得分:1)
您可以访问ListSerializer.to_representation
应该是您想要做的好地方。
方法如下:
def to_representation(self, data):
"""
List of object instances -> List of dicts of primitive datatypes.
"""
# Dealing with nested relationships, data can be a Manager,
# so, first get a queryset from the Manager if needed
iterable = data.all() if isinstance(data, models.Manager) else data
return [
self.child.to_representation(item) for item in iterable
]
但是,老实说,我看不到你会从中得到什么。您的用例似乎无法显着提高性能。