Django REST frameworkチュートリアル その4.2
Associating Snippets with Users
前回の記事「Django REST frameworkチュートリアル その4.1」の続きです。
チュートリアルその4の記事で以下のTODOがありました。
スニペットを登録するときに自動でリクエストを送った人が
owner
となるように登録したいです。
この機能を実装してみましょう。
views.py
この実装はかなり簡単です。SnippetList
クラスのperform_create()
メソッドをオーバーライドするだけです。
from rest_framework.response import Response
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer, UserSerializer
from snippets.permissions import IsOwnerOrReadOnly
from django.contrib.auth.models import User
from rest_framework import generics, permissions
class SnippetList(generics.ListCreateAPIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [IsOwnerOrReadOnly]
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
class UserList(generics.ListCreateAPIView):
permission_classes = [permissions.AllowAny]
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetails(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [IsOwnerOrReadOnly]
queryset = User.objects.all()
serializer_class = UserSerializer
公式ドキュメントを参照すると、
perform_create(self, serializer)
- Called byCreateModelMixin
when saving a new object instance.
とあります。perform_create
はCreateModelMixin
から呼び出されて、新しいオブジェクトインスタンスを保存するときに呼び出されるメソッドのようですね。
テスト
スニペットを新規作成するリクエストを送ってみましょう。
curl -X POST -H 'Content-Type:application/json' -H 'Authorization: Bearer <your access token>' -d '{"title":"hoge","code":"fuga"}' http://localhost:8000/snippets/
owner
が自動で登録されるのが確認できたでしょうか。
以上でオーナーの自動登録は完了です。
Author And Source
この問題について(Django REST frameworkチュートリアル その4.2), 我々は、より多くの情報をここで見つけました https://qiita.com/Gattaca/items/a678134cef8098f7b21c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .