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