django - 如何序列化 API 响应(在 JSON 中)并在 Django Rest Framework 中修改和添加字段?

标签 django serialization 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_scoresentiment_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 rest MethodSerializer 字段。

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

关于django - 如何序列化 API 响应(在 JSON 中)并在 Django Rest Framework 中修改和添加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863802/

相关文章:

python - OSError :/usr/lib/libgdal. so.20: undefined symbol :sqlite3_column_table_name

python - 如何使 UUID PK 更易于索引

python - cookie 和 token 的工作原理

python - Django 调试工具栏是否适用于 DRF?

python - Django 无法使用 "python manage.py syncdb"命令创建默认表

python - URLS.py 的 pybbm 错误

java - Text.getBytes() 返回意外结果

java - Spring 启动 jackson : How to remove nulls from java array?

javascript - 如何序列化 JavaScript 中的函数?

python - 从一个 Django 站点到另一个站点的 API 调用