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)
关于如何实现这一目标的一些建议:
SomeModel,并且可以通过序列化器字段将其公开为只读。Django 还有@cached_property,因此该值仅计算一次,并且只要实例存在就持续存在只是一个关于如何使用它的简单示例。
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)
| 归档时间: |
|
| 查看次数: |
4499 次 |
| 最近记录: |