python - 使用单个 API 调用的 Django REST 框架序列化器字段
问题描述
我有一条使用 ViewSet 的路线
router.register(
r'mapping_details',
GlobalMappingDetailsViewSet,
base_name='global-store-product-mappings'
)
此视图集包含一个get_queryset
方法和一个序列化程序。
class GlobalMappingDetailsViewSet(viewsets.ModelViewSet):
serializer_class = GlobalMappingDetailsSerializer
def get_queryset(self):
return models.Mappings.objects.all().select_related('my_column')
class GlobalMappingDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = models.Mappings
fields = ('column1', 'column2')
我想在请求的响应中添加 2 个使用单个 API 调用填充的字段。我可以使用serializers.Field
,但必须对这两个字段进行单独调用。
有人知道处理这个用例的正确方法吗?
解决方案
做到这一点的方法是覆盖Django Viewset 操作。在我的情况下,我只需要在字段中填充响应,我覆盖了list
andretrieve
操作并将字段添加到响应中。
一些示例代码:
def retrieve(self, request, *args, **kwargs):
response = super(GlobalMappingDetailsViewSet, self).retrieve(request, *args, **kwargs)
data = response.data
api_response = MyService.make_api_call(data.get('id'))
data['my_new_field'] = api_response.get('response_field', '')
return response
推荐阅读
- django-rest-framework - drf-spectacular:如何在 Swagger 的示例部分显示主键
- javascript - 如何使用jquery根据指定的高度获取最近的元素
- r - 基于数据帧子集中的多个参数计算新变量
- ios - 如何在 iOS 中使用从 Web 下载的 SVG?
- alacritty - 如何在启动时运行管道函数以实现 alacritty?
- sqlite - Octave:从 sqlite db 文件中读取 BLOB 数据
- python - 用熊猫将一列从一行中移一列
- python - 按时间顺序生成随机范围内的数字样本
- swiftui - 在实现视图样式模式时,有没有办法避免视图类型擦除?
- apache-kafka - Kafka多/两个节点设置与不同服务器/节点上的生产者和消费者