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 # <- 加工した変数を返却