django - 如何序列化 API 响应(以 JSON 格式)并在 Django Rest Framework 中修改和添加字段?
问题描述
我从 DRF 中的不同 API 获取数据。但是,为了强制执行模块化,我需要序列化 JSON 响应并为我调用的每个 API 端点创建一个“假”模型。
我已经为端点创建了一个模型和一个序列化程序,但是我需要在序列化以前的响应时进行另一个 API 调用,我需要修改一些字段。
from rest_framework import serializers
from django.db import models
from ..nlp_utils.google_nlp import GoogleNLP
class Search(models.Model):
title = models.CharField(blank=True, default='')
link = models.CharField(blank=True, default='')
snippet = models.CharField(blank=True, default='')
description = models.CharField(blank=True, default='')
sentiment_score = models.FloatField(blank=True, default=0.0)
sentiment_magnitude = models.FloatField(blank=True, default=0.0)
class SearchResultSerializer(serializers.ModelSerializer):
class Meta:
model = Search
fields = ('title', 'link', 'snippet', 'description','sentiment_score', 'sentiment_magnitude')`
在这里,我需要调用更多端点并填充sentiment_score
和sentiment_magnitude
解决方案
你有两个选择:
选项1
您可以覆盖to_representation
序列化程序的方法。每个序列化程序都有一个调用方法,该方法to_representation
将创建将传递给用户的 json 响应。例如:
class SearchResultSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
r = super(TodoSerializer, self).to_representation(instance)
r.update({
'sentiment_score': 'anything you want here'
})
return r
选项 2
在序列化程序中使用 django restMethodSerializer
字段。
class SearchResultSerializer(serializers.ModelSerializer):
sentiment_magnitude = serializers.SerializerMethodField()
class Meta:
model = Search
fields = '__all__'
def get_sentiment_magnitude(self, obj):
sentiment_magnitude = "anything you want here"
return sentiment_magnitude
推荐阅读
- ffmpeg - FFMPEG php HLS 和 DASH 转换
- python - 我想根据 pandas 列发送电子邮件
- javascript - 使用 nodejs 库为 google 经销商 api 验证服务帐户时出现问题
- android - 如何使用推送器发送数据类型映射?
- sas - PROC FCMP 返回不正确的字符串长度
- firebase - 上传用户个人资料图片 Firebase - Flutter
- ios - UICollectionViewCompositionalLayout - 部分作为列
- c# - 创建 PDF 适用于 Unity (Windows) 但不适用于 Android 设备
- google-cloud-platform - 如何为免费的谷歌云功能缓存一个低于 5MB 的配置?
- java - hamcrest-core: jar:1.4-atlassian-1 无法在 Spring Boot 项目的 MVN 全新安装上解决