0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ViewSet actionsの種類 | Django REST Framework

Posted at

Django REST FrameworkのViewSet、特にModelViewSetで自動的に提供しているlist, retrieve, create, update, partial_update, destroyなどのCRUDアクションの種類を整理します。

参考:公式ドキュメントViewSet actions

create

  • HTTPリクエスト: POST
  • 役割: 新しいレコードを作成します。通常、POSTリクエストを処理し、新しいインスタンスをデータベースに保存します。新規登録によく使われます。
def create(self, request, *args, **kwargs)

list

  • HTTPリクエスト: GET (複数のオブジェクト)
  • 役割: 全てのレコード、またはフィルタされたレコードのリストを取得します。通常は/api/resource/のようなリクエストに対応します。〇〇一覧とかのページを作るときに◎
def list(self, request, *args, **kwargs)

retrieve

  • HTTPリクエスト: GET (単一のオブジェクト)
  • 役割: 特定の1つのレコードを取得します。/api/resource//のようなリクエストで、特定のpkに基づいてデータを取得します。詳細ページの表示とかに使います。
def retrieve(self, request, *args, **kwargs)

partial_update

  • HTTPリクエスト: PATCH
  • 役割: 特定のレコードを部分的に更新します。PATCHリクエストで送信されたフィールドのみを更新します。レコードのある特定のカラム(フィールド)だけ変更を加えたいという時に使います。フラグ変更、論理削除とかに使ったことがあります。
def partial_update(self, request, *args, **kwargs)

destroy

  • HTTPリクエスト: DELETE
  • 役割: 特定のレコードを削除します。通常、/api/resource//のように特定のpkに対してDELETEリクエストを送信すると、そのリソースが削除されます。要は物理削除です。レコードを完全に消したい時に使います。
def destroy(self, request, *args, **kwargs)

update

  • HTTPリクエスト: PUT
  • 役割: 特定のレコードを完全に更新します。リクエストで送信された全フィールドで既存のリソースを置き換えます。レコードの全てのカラム(フィールド)に更新をかけたい時に使います。
def update(self, request, *args, **kwargs):

update と partial_update の違い

両者の違いは、特定のレコードのカラム(フィールド)の一部変更か、もしくは全カラム(フィールド)変更かという違いです。

  • update: 一般的にはPUTリクエストに対応し、クライアントから全フィールドの値を送ることを期待します。欠けたフィールドはデフォルト値やnullで上書きされることが多いため、全フィールドの更新が前提です。
  • partial_update: PATCHリクエストに対応し、送信された一部のフィールドだけを更新します。未送信のフィールドは変更されず、元の値が保持されます。

しかし、pertial_updateで全カラム(フィールド)の変更情報を送っても変更はできてしまいます。
また、updateメソッドでも全レコードの変更内容を送らず、PATCHに対応させるように書く方法もあります。

そのため、両者の違いがよくわからないですが、私は部分更新(フィールドの一部変更)が主流であれば、pertial_updateというふうに書いてみています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?