动态添加字段到 drf 序列化器

And*_*mas 3 django-models django-serializer django-rest-framework

我有一个 API 端点,它返回我的模型之一的对象列表。我有一个非常简单的序列化器,当前返回所有模型字段。

我现在需要的是向该序列化器添加另一个字段,该字段是通过在模型字段之一和另一个动态计算的数据结构上应用逻辑来计算的 - 但每次调用 API 时只应计算一次。

对于每个 API 调用但不是对于序列化器返回的每个对象,向序列化器提供此结构的方法是什么?

我的 ModelViewSet (没有额外的字段)非常简单:

class MyModelViewset(ModelViewSet):
    queryset = SomeModel.objects.all()
    serializer_class = SomeModelSerializer
Run Code Online (Sandbox Code Playgroud)

Gab*_*Muj 7

关于如何实现这一目标的一些建议:

只是一个关于如何使用它的简单示例。

class MyModelViewset(ModelViewSet):
    queryset = SomeModel.objects.all()
    serializer_class = SomeModelSerializer

    def get_serializer_context(self):
        context = super().get_serializer_context()
        context['my_value'] =  [] # calculate something here, you have access to self.request
        return context

class SomeModelSerializer(serializers.ModelSerializer):
    my_data = serializers.SerializerMethodField()

    class Meta:
        model = SomeModel

    def get_my_data(self, obj):
        # you have access to self.context['my_value']
        # you have access to obj.some_property
        return my_data
Run Code Online (Sandbox Code Playgroud)