
Django Rest Frameworkには便利なシリアライザー機能が含まれています。ModelSerializerはモデルの情報に簡単にアクセスすることができます。
ModelSerializerクラスの特徴
- モデルに対応するフィールドを自動的に生成
- シリアライザーのバリデータを自動的に生成 (unique_togetherバリデータなど)
- create(), update()などの実装が含まれている
ファイルの作成とインポート
Djangoのアプリケーションディレクトリに「serializers.py」ファイルを作ります。下記のようにインポートを指定します。上の2つがserializersを使うための記述。サイトを作るときはauth, authtoken を実装することが多いのでインポート部分は下記のようになる場合が多いです。
#rest_frameworkからserializersをインポート
from rest_framework import serializers
#利用するモデルをインポート
from .models import Article
#Userモデルでauthを使うためのインポート
from django.contrib.auth.models import User
#authtokenを使うためのインポート
from rest_framework.authtoken.models import Token
ModelSerializerの記述
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ['id', 'article_name', 'users', 'created']
class モデル名+Serializer(serializers.ModelSerializer): でモデルシリアライザーを宣言します。
クラスの全てのモデルフィールドが対応するシリアライザーフィールドにマッピングされます。
class Meta : と記載し、その下に項目を設定していきます。
model = Model名
fields =[] →フィールドは配列(カンマ区切り)で指定します。
モデル内のすべてのフィールドを使用したいときは
fields = '__all__'
で指定することができます。
シリアライザーから除外したいフィールドが有るときは
exclude = ['users']
と指定できます。
読み取りだけにしたいフィールドがある場合は
read_only_fields = [
'created_at',
'updated_at',
]
モデルでは必須フィールドで、シリアライズ時のみに設定を行いたいときはextra_kwargsを使います。
extra_kwargs = {'password': {'write_only': True, 'required': True}}
ModelSerializerのフォーマット
from rest_framework import serializers
from .models import Article
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ['id', 'article_name', 'users', 'created']
read_only_fields = [ 'created_at','updated_at',]
extra_kwargs = {'password': {'write_only': True, 'required': True}}