Django-Rest-Frameworkで変数を加工してAPIに返す方法

DRFでデータをそのままAPIでリターンするのではなく、データを組み合わせたして加工してからAPIでリターンしたい場合ですが、そういった処理はSerializerに記載します。加工する関数、ここでは”def new_medhod_name( )”と新たに加工してから送り出す変数名”new_field_name”は以下のような書き方にすればOK。

Serializer fields - Django REST framework
Django, API, REST, Serializer fields
rom django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    days_since_joined = serializers.SerializerMethodField()
    new_field_name = serializers.SerializerMethodField(method_name='new_medhod_name') # <= こういった感じで関数名を指定することも可能。こうしない場合は、変数名に"get_"が付加された関数が使われる。

    class Meta:
        model = User
        fields = [field_A, field_B, ..., days_since_joined, new_field_name ] # ここに新しく作る変数名を追加

    # class Metaとdefは同じ階層にある点に留意
    def get_days_since_joined(self, obj):
        return (now() - obj.date_joined).days
       
    def new_method_name(self, obj):
        manipulated_var = obj.var_A + 2 * obj.var_b # <- 何らかの加工
        return manipulated_var # <- 加工した変数を返却