Django REST Frameworkに再挑戦 その9 Serializer Method Field
概要
Django REST Frameworkに再挑戦 その9 Serializer Method Field
参考サイト
www.codingforentrepreneurs.com
Serializer Method Field
Serializer fields - Django REST framework
method_name - The name of the method on the serializer to be called. If not included this defaults to get_<field_name>. # get_フィールド名の関数を定義すると、その関数で定義した通りに表示されるということだと思う。 # 例だとuser の firstnameを取り出して表示するときとかに使うことが多いみたい。あとは商品テーブルだと価格とかかな。
- serializers.pyにコードを追記する。これはuserの箇所にusernameを表示させるコード。
from rest_framework.serializers import ( HyperlinkedIdentityField, ModelSerializer, SerializerMethodField, ) ... class PostListSerializer(ModelSerializer): url = post_detail_url user = SerializerMethodField() class Meta: model = Post fields = [ 'url', 'user', 'title', 'content', 'publish', ] def get_user(self, obj): return str(obj.user.username)
- さらにimageのurlなども表示できる。
class PostDetailSerializer(ModelSerializer): url = post_detail_url user = SerializerMethodField() image = SerializerMethodField() class Meta: model = Post fields = [ 'url', 'user', 'id', 'title', 'slug', 'content', 'publish', 'image', ] def get_user(self, obj): return str(obj.user.username) def get_image(self, obj): try: image = obj.image.url except: image = None return image
- さらに元々のclassのインスタンス(ここでは、Post classのインスタンス)のメソッドも呼び出してセットできる。ここでは、get_markdownメソッドを呼び出してその返り値をセットしてみる。
class PostDetailSerializer(ModelSerializer): url = post_detail_url user = SerializerMethodField() image = SerializerMethodField() markdown = SerializerMethodField() class Meta: model = Post fields = [ 'url', 'user', 'id', 'title', 'slug', 'content', 'markdown', 'publish', 'image', ] def get_markdown(self, obj): return obj.get_markdown() def get_user(self, obj): return str(obj.user.username) def get_image(self, obj): try: image = obj.image.url except: image = None return image
- これも便利やな〜〜!!すげぇ!