🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1532閲覧

Django REST frameworkでカスタマイズするのはModelViewSet?ModelSerializer?

KoshiroNomura

総合スコア11

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/04 06:03

Django REST frameworkにて、アプリ作成を行っております。

Modelを作成し、ModelViewSet、ModelSerializeを作成し、一通りの作業が完了し、
「さて、カスタマイズするか!」の段階まで来ました。

まずは、AbstractBaseUserクラスを継承し、自作したCustomizedUserモデルを登録する際、
1対1のリレーションを作成しているFamilyモデルを作成し、紐づける処理を作成しました。

Python

1from rest_framework import serializers 2 3from ..models.family_model import FamilyModel 4from ..models.Customized_user_model import CustomizedUserModel 5 6 7class CustomizedUserSerializer(serializers.ModelSerializer): 8 """ 9 ModelデータをJSON形式に変換するシリアライザー 10 """ 11 class Meta: 12 fields = ('id', 13 'email', 14 'password', 15 'first_name', 16 'last_name', 17 'nick_name', 18 'phone_number', 19 'family', 20 'is_staff', 21 'is_active', 22 'is_superuser', 23 'create_at', 24 'update_at') 25 model = CustomizedUserModel 26 27 def create(self, validated_data): 28 # 家族作成 29 family_model = FamilyModel() 30 family_model.save() 31 32 # Customizedユーザ作成 33 email = validated_data['email'] 34 password = validated_data['password'] 35 customized_user_model = CustomizedUserModel(email=email, family=family_model, is_active=True) 36 37 customized_user_model.set_password(password) 38 customized_user_model.save() 39 40 return validated_data 41

無事にレコードが登録されたのですが、ModelViewSetのカスタマイズでも
同じことが達成できるのでは?と思い、今回の質問に至りました。

皆様はこのようなケースの場合、ModelViewSet、ModelSerializerのどちらのカスタマイズをおこなっているのでしょうか?

また、「このケースはModelViewSet、こちらはModelSerializer」など、
場合分けができるのであれば、そちらについてもご回答をお願いできますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一個人の意見です。

ModelSerializer

Serializerは入力されたデータのバリデーションやフォーマット、新たなフィールドを作成するときに用いています。
具体的には、フォーマットは以下のようにできて、使っています。

class CustomizedUserSerializer(serializers.ModelSerializer): created_at = serializers.DateTimeField(format="%Y/%m/%d", read_only=True)

他にも、あらたなメソッドを作ることができ、カスタマイズしています。(モデルで定義しなくても)
MethodFeldです。

ModelViewSet

具体的な処理をカスタマイズしています。
ModelViewsetではすべてのメソッドが有効化サれますが、オーバーライドすることで無効化できます(単に400を返すということ)

他にも、actionという機能を用いて、指定したurlでのみ行われる処理も書くことができます。

ドキュメントを見るとわかりますが使い方は無限大ですので参考程度にどうそ!

投稿2021/03/04 06:41

prof

総合スコア179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoshiroNomura

2021/03/04 21:24

情報ありがとうございます!! 今回当方のカスタマイズ内容はあまり正しくはなさそうですね。 ご提供頂いた内容にて実装しようと思います!! >>ドキュメントを見るとわかりますが使い方は無限大ですので参考程度にどうそ! ほんとに無限大ですので悩みます、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問