この記事の続きです。
programming-gogogogo.hatenablog.com
こちらの動画を見ながらPythonのDjango REST framework(DRF)について勉強しています。
ArticleSerializerを以下のようにserializers.Serializerで定義したので、
class ArticleSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
author = serializers.CharField(max_length=100)
email = serializers.EmailField(max_length=100)
date = serializers.DateTimeField()
def create(self, validated_data):
return Article.objects.create(validated_data)
def update(self, instance, validated_data):
instance.title = validated_data.get('title', instance.title)
instance.author = validated_data.get('author', instance.author)
instance.email = validated_data.get('email', instance.email)
instance.date = validated_data.get('date', instance.date)
instance.save()
return instance
より短いコードで同じ内容を書けるようにserializers.ModelSerializerで書き直します。
公式ドキュメントでは以下に説明があります。
Our SnippetSerializer class is replicating a lot of information that's also contained in the Snippet model. It would be nice if we could keep our code a bit more concise.
In the same way that Django provides both Form classes and ModelForm classes, REST framework includes both Serializer classes, and ModelSerializer classes.
公式ドキュメントではSnippetというクラス名ですが、これを自分で作ってるArticleというクラス名して以下のように解釈しました。
ArticleSerializerはArticleモデルと持っている情報に重複がある。
もっと簡潔にコードを書けた方が良い。
DjagoでFormクラスとModelFormクラスがあるように、DRFにはSerializerクラスとModelSerializerクラスがある。
ArticleSerializerクラスを以下のように修正します。
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ['id', 'title', 'author']
上記を定義した後pythoh manage.py shellでターミナルから動作確認すると、ArticleSerializerに登録されているフィールドが確認できます。

感想
DRFでModel Serializerに使い方がわかってきました。
Model Serializerの使い方がわかりやすくなるように先に冗長な書き方でArticleSerializerを書いていたのも理解を深めるために良かったです。
他の勉強にも応用していきます。