12. シリアライザーの定義
• mysite/blog/serializers.pyを作成し、下記を記述
from rest_framework import serializers
from .models import *
class MemberSerializer(serializers.ModelSerializer):
class Meta:
model = Member
fields = ('id', 'name', 'email', 'birthday')
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ('title', 'content', 'status')
• モデルから取得したデータをどういった項目で、どのような形式で
JSONに変換するかを定義する。
• POSTされてきた登録データをモデルに変換を行う。バリデーション
や登録を行う。
13. シリアライザーの定義(設定例)
class MemberSerializer(serializers.ModelSerializer):
birthday = serializers.DateField(format='%Y年%m月%d日')
class Meta:
model = Member
fields = ('id', 'name', 'email', 'birthday')
class ArticleSerializer(serializers.ModelSerializer):
member_id = serializers.IntegerField(write_only=True)
member = MemberSerializer(read_only=True)
class Meta:
model = Article
fields = ('title', 'content', 'status', 'member_id', 'member')
例1:リレーション先のデータもシリアライズ
例2:日付を年月日で
14. シリアライザーの定義(設定例)
class ArticleSerializer(serializers.ModelSerializer):
status_name = serializers.SerializerMethodField()
class Meta:
model = Article
fields = ('id', 'title', 'content', 'status', 'status_name')
def get_status_name(self, obj):
return obj.get_status_display()
例3:区分(状態)を名前で返す
class MemberSerializer(serializers.ModelSerializer):
birthday = serializers.DateField(input_formats=['%Y-%m-%d', '%Y/%m/%d'])
class Meta:
model = Member
fields = ('id', 'name', 'email', 'birthday')
例4:日付のバリデーションチェック(スラッシュ区切りかハイフン区切り)