[DRF] Model Serializerの使い方

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}}

参考

Django REST Framework公式チュートリアル モデルシリアライザー



Author: webmaster