我有一个序列化程序,它实现了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)我想要做的是重写ItemSerializer中的ItemSerializer方法,以便当我想获得整个项目列表时。基本上,我希望避免对每个项执行函数调用,而是在出于性能原因请求项目列表时对所有项进行大容量调用。
有什么好办法吗?我遵循这些创建ItemListSerializerhttps://www.django-rest-framework.org/api-guide/serializers/#customizing-listserializer-behavior的文档,但它只讨论了重写创建和更新方法。
发布于 2018-10-15 15:21:37
您可以访问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
]但老实说,我看不出你会从中得到什么。您的用例看起来没有任何可测量的性能提升。
https://stackoverflow.com/questions/52819113
复制相似问题